1.中间件的定义
中间件是一个用来处理Django请求和响应的框架级别的钩子,它是一个轻量级,低级别的插件系统,用于在全局范围内改变Django的输入和输出,每个中间件都负责一些特定的功能。
2.中间件的五个固定方法
2.1 process_request(self,request) # 处理请求的
执行顺序
按照注册的顺序(在settings.py里面的中间件设置中,按照从上到下的顺序执行)
返回值
默认返回None,然后继续执行后面的中间件中的process_request方法
如果返回response,不执行后续的中间件中的process_request方法
2.2 process_response(self,request,response) # 处理响应
执行顺序
按照注册顺序的倒序执行,(在settings.py中间件配置中,从下往上的顺序执行)
返回值
必须返回一个response,可以在自定义返回值
如果views中函数有返回值则被process_response中的返回值所代替
2.3 process_view(self,request,view_func,view_args,view_kwargs) # 处理视图
执行顺序
按照注册的顺序(在settings.py里面的中间件设置中,按照从上到下的顺序执行)
何时执行
在执行urls.py之后,views.py之前,这个方法被执行,如果有一个process_view有一个response返回值,就不在继续执行views.py中的函数了,会直接执行process_response方法
返回值
默认返回None,继续执行后续中间件中的process_view方法
如果返回response,则默认返回process_response中的返回值
2.4 process_exception(self,request,exception) # 处理异常
执行顺序
按照注册顺序的倒序执行,(在settings.py中间件配置中,从下往上的顺序执行)
何时执行
视图函数中抛出异常的时候才执行
返回值
返回None,继续执行后续中间件中的process_exception方法
返回response对象
2.5 process_template_response(self,request,response) # 处理模板
执行顺序
按照注册顺序的倒序执行,(在settings.py中间件配置中,从下往上的顺序执行)
何时执行
视图函数执行完,在执行视图函数返回的响应对象的render方法之前
返回值
返回None,继续执行后续中间件中的process_template_response方法
返回response对象
Django调用中间件的顺序:process_request ---> urls.py ---> process_view ---> 有异常执行process_exception,有render方法执行process_template_response ---> process_response