当前位置 : 主页 > 编程语言 > python >

doraemon的python django的中间件(国庆大更新)

来源:互联网 收集:自由互联 发布时间:2021-06-25
# ## 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)
网友评论