中间件的定义
wsgi接口之后、urls.py之前,在全局操作Django请求和响应的模块。
中间件的使用
(1)django中setting.py文件有默认的7个中间件。从源码看从,中间件的构造首先要定义一个继承MiddlewareMixin的类,可以在类中实现以下5个方法。主要实现process_request和process_response两个方法
1)process_request(self,request)
2)process_response(self,request,response)
3)process_view(self,request,view_func,view_args,view_kwargs)
4)process_template_response(self,request,response)
5)process_exception(self, request, exception)
(2)自定义中间件示例
from django.utils.deprecation import MiddlewareMixin
class FirstMiddleWare(MiddlewareMixin):
def process_request(self,request):
print("FirstMiddle_request")
def process_response(self,request,response):
print("FirstMiddle_response")
return response
(3)process_request(self,request)
1)有一个request参数,按照注册顺序的正序执行,在wsgi后执行。
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。
(4)process_response(self,request,response)
1)有request,response两个参数,按照注册顺序的倒序执行,在url.py前执行。
2)必须有一个response返回值。
(5)process_view(self,request,view_func,view_args,view_kwargs)
1)有request,view_func,view_args,view_kwargs四个参数,按照注册顺序的正序执行,在url.py之后执行
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。
(6)process_template_response(self,request,response)
1)有response.response两个参数,按照注册顺序的倒序执行,在template中页面执行完之后执行。
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。
(7)process_exception(self, request, exception)
1)有request,exception两个参数,按照注册顺序的倒序执行,视图函数出现异常的时候才执行。
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。