# ## 11.13 中间件 中间件的定义:中间件是处理django的请求和相应的框架级别的钩子,本质上就是一个类中间件可以定义为五个方法: - process_request(self,request) - process_view(self, request, vie
### 11.13 中间件 中间件的定义: 中间件是处理django的请求和相应的框架级别的钩子,本质上就是一个类 中间件可以定义为五个方法: - process_request(self,request) - process_view(self, request, view_func, view_args, view_kwargs) - process_template_response(self,request,response) - process_exception(self, request, exception) - process_response(self, request, response) 4个特征:执行时间、执行顺序、参数、返回值 1.process_request(self,request) 执行时间:视图函数之前 参数:request —— 》 和视图函数中是同一个request对象 执行顺序:按照注册的顺序 顺序执行 返回值: ? None : 正常流程 ? HttpResponse: 后面的中间的process_request、视图函数都不执行,直接执行当前中间件中的process_response方法,倒叙执行之前的中间中process_response方法。 2.process_response(self, request, response) 执行时间:视图函数之后 参数: ? request —— 》 和视图函数中是同一个request对象 ? response ——》 返回给浏览器响应对象 执行顺序:按照注册的顺序 倒叙执行 返回值: ? HttpResponse:必须返回response对象 3.process_view(self, request, view_func, view_args, view_kwargs) 执行时间:视图函数之前,process_request之后 参数: ? request —— 》 和视图函数中是同一个request对象 ? view_func ——》 视图函数 ? view_args ——》 视图函数的位置参数 ? view_kwargs ——》 视图函数的关键字参数 执行顺序:按照注册的顺序 顺序执行 返回值: ? None : 正常流程 ? HttpResponse: 后面的中间的process_view、视图函数都不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。 4.process_exception(self, request, exception) 执行时间(触发条件):视图层面有错时才执行 参数: ? request —— 》 和视图函数中是同一个request对象 ? exception ——》 错误对象 执行顺序:按照注册的顺序 倒叙执行 返回值: ? None : 交给下一个中间件取处理异常,都没有处理交由django处理异常 ? HttpResponse: 后面的中间的process_exception不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。 5.process_template_response(self,request,response) 执行时间(触发条件):视图返回的是一个templateResponse对象 参数: ? request —— 》 和视图函数中是同一个request对象 ? response ——》 templateResponse对象 执行顺序:按照注册的顺序 倒叙执行 返回值: ? HttpResponse:必须返回response对象 ![img](https://images2018.cnblogs.com/blog/867021/201804/867021-20180409214433968-2137571775.png) ![img](https://images2018.cnblogs.com/blog/1168194/201807/1168194-20180719084357413-1778333372.png)