django之中间件的配置使用

  

首先了解下在django中请求处理的过程:

浏览器发起请求——》匹配url成功——》运行观点视图函数——》调用html模板——》返回给浏览器。

面向切面编程:就是在一种开发好的框架,上述过程中,任意箭头位置打断正常流程,加入一些干预的处理环节,从而实现更多功能且不影响原来的框架流程。


根据以上要求,最简单的方法就是修改django的源代码,但这样对一般人来说非常有难度,所以,django在框架设计中,就预留出来了这些处理环节,用户在使用时,根据实际需要选择修改或者不修改即可。


在django中通过提供了一种面向切面编程的工具就叫中间件;实际上中间件就是一个python的类,有固定的6中方法可实现:

(1) _init_:服务器响应第一个请求时调用一次,用于确定是否启用当前中间件;

(2) process_request(请求):执行视图前被调用,在每个请求上调用,返回没有或HttpResponse对象,

(3) process_view(请求、view_func view_args view_kwargs):调用视图前被调用,在每个请求上调用,返回没有或HttpResponse对象,

(4) process_template_response(请求、响应):在视图刚好执行完后被调用,在每个请求上调用,返回实现了渲染方法的响应对象,

(5) process_response(请求、响应):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象,

(6) process_exception(请求、响应异常):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。


下面显示各个方法在流程中的位置:

浏览器发起请求——流程请求()——》匹配url成功,prcess_view()——》运行观点视图函数——process_template_response()——》调用html模板——process_response()——》返回给浏览器。


第一次浏览器发起请求——》_init_ ();

运行观点视图函数时,出现异常——》process_exception——》process_response——》返回浏览器。


下面演示中间件的配置使用,环境同上篇django文章。

在应用中定义一个python类,实现中间件:

)#,cd  py3/django-test1/test5   )#,vim 书店/MyException。py
)#,vim  test5/设置。py 
)#,vim 书店/views.py
  得到django.shortcuts  import 渲染
  得到django.http  import  HttpResponse
  
  #,Create  your  views 这里。
  def 指数(请求):
  ,,,return 渲染(请求,& # 39;书店/index . html # 39;)
  def  myExp(请求):
  ,,,return  HttpResponse (& # 39; hello_world # 39;) 

配置url:

)#,vim 书店/urls . py   得到django.conf.urls  import  url   得到只import 视图   urlpatterns =, (   ,,,url (" # 39; ^ $ & # 39;, views.index),   ,,,url (" # 39; ^ myexp $ & # 39;, views.myExp),   )


启动django服务:

)#,cd  py3/django-test1/test5   )#,python  manage.py  runserver  192.168.255.70:8000


浏览器访问:http://192.168.255.70:8000 myexp

显示:hello_world


在视图中,设置一个异常代码:

)#,vim 书店/views.py   …   def  myExp(请求):   ,,,a1 =, int (& # 39; abc # 39;)   ,,,return  HttpResponse (& # 39; hello_world # 39;)


浏览器访问:http://192.168.255.70:8000 myexp

显示:无效的文字与基地10:int () & # 39; abc # 39;


django之中间件的配置使用