标签:app __call__ rgs ini class none end logs war
自定义middleware
新建一个文件夹,里面写自己的middleware
在settings 设置,
在middleware.py文件中导入
from django.utils.deprecation import MiddlewareMixin
如果没法导入
可以这么写
class MiddlewareMixin(object): def __init__(self, get_response=None): self.get_response = get_response super(MiddlewareMixin, self).__init__() def __call__(self, request): response = None if hasattr(self, ‘process_request‘): response = self.process_request(request) if not response: response = self.get_response(request) if hasattr(self, ‘process_response‘): response = self.process_response(request, response) return response
class M1(MiddlewareMixin): def process_request(self,request): print(‘m1.process_request‘) def process_response(self,request,response): print(‘m1.process_response‘) return response def process_view(self, request, view_func, view_func_args, view_func_kwargs): print(‘m1.process_view‘) return render(request, ‘login.html‘) class M2(MiddlewareMixin): def process_request(self, request): print(‘m2.process_request‘) def process_view(self, request, view_func, view_func_args, view_func_kwargs): print(‘M2.process_view‘) # return render(request, ‘login.html‘) def process_exception(self, request, exception): print(‘m2.process_exception‘) return HttpResponse(‘开发的程序员已经被打死‘) def process_response(self, request, response): print(‘m2.process_response‘) return response def process_template_response(self, request, response): print(‘m2.process_template_response‘) return response
5个方法:
process_request
process_response
process_exception
process_template_respons
process_view(self, request, view_func, view_func_args, view_func_kwargs)
process_response 是要有返回值的,
关于执行的顺序,
在上面这个列表中,当http请求到来,request会依次经过app01.md.M1,......django.middleware.clickjacking.XFrameOptionsMiddleware
response 正好相反
note:
标签:app __call__ rgs ini class none end logs war
原文地址:http://www.cnblogs.com/yuyang26/p/7553529.html