Django-website 程序案例系列-13 中间件
自定义中间件1:
from django.utils.deprecation import MiddlewareMixin # 中间件需要引用的包 class Row1(MiddlewareMixin): #自定义中间件函数 def process_request(self, request): print('1') def process_response(self, request, response): print('1') return response class Row2(MiddlewareMixin): #自定义中间件函数 def process_request(self, request): print('2') def process_response(self, request, response): print('2') return response class Row3(MiddlewareMixin): #自定义中间件函数 def process_request(self, request): print('3') def process_response(self, request, response): print('3') return response
views.py
def mid(request): print('mei qian') return HttpResponse('OK')
返回的值: 执行的print反应了中间件的执行顺序如下
自定义中间件2:
from django.utils.deprecation import MiddlewareMixin class Row1(MiddlewareMixin): # 自定义中间件函数 def process_request(self, request): print('1') def process_view(self, request, view_func, view_func_args, view_func_kwargs): print('11') def process_response(self, request, response): print('1') return response class Row2(MiddlewareMixin): # 自定义中间件函数 def process_request(self, request): print('2') def process_view(self, request, view_func, view_func_args, view_func_kwargs): print('22') def process_response(self, request, response): print('2') return response class Row3(MiddlewareMixin): # 自定义中间件函数 def process_request(self, request): print('3') def process_view(self, request, view_func, view_func_args, view_func_kwargs): print('33') def process_response(self, request, response): print('3') return response
返回的值: 执行的print反应了中间件的执行顺序如下
自定义中间件3:
在urls.py中加入这个url: url(r'^mid/(?P<nid>\d+)$', views.mid) # nid是传递的参数{nid: 'xxx'} def process_view(self, request, view_func, view_func_args, view_func_kwargs): # nid可传递给中间件中的view_func_kwargs 接收一个键值{nid:'xxx'} print('33') 在urls.py中加入这个url: url(r'^mid/(\d+)$', views.mid) # 直接传递一个数值参数('3') def process_view(self, request, view_func, view_func_args, view_func_kwargs): # 可传递给中间件中函数的view_func_args 接收一个数值参数('3') print('33')
中间件流程图:
中间件中的异常处理: def process_exception(self, request, exception): #此函数一般不执行除非中间件发生异常 print('ex') 中间件的render对象返回: class def render(self): return HttpResponse('OK') def test(request,nid): print('2') return Foo() def process_template_response(self,request,response): # 需要view中的函数返回的对象中具有render方法 print('111') return response