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

浙公网安备 33010602011771号