Django中间件 (middleware)

中间件是处理django的请求和响应的框架级别的钩子,本质是一个类(直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作)

由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。

定义的中间件需要注册

django中请求响应流程

Django中间件 (middleware)

1.中间件定义的五个方法:

process_request(self,request)

process_response(self, request, response)

process_view(self, request, view_func, view_args, view_kwargs)

process_exception(self, request, exception)

process_template_response(self,request,response)

1.1 process_request

process_request(self,request)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

执行时间: 在执行视图函数之前执行

参数: request

request和视图函数中的的request是一个对象

执行顺序:

按照注册的顺序进行执行

返回值:

返回值为none的时候,执行顺序正常

返回值如果是HttpResponse, 后面的中间件的process_request、视图函数都不执行,直接执行当前中间件中的process_response方法,再倒序执行之前的中间件中process_response方法。

1.2 process_response

process_response(self, request, response)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

执行时间: 在执行视图函数之后执行

参数: request / response

request 和视图函数中的的request是一个对象

response 返回给浏览器响应对象(不一定是视图对象,peocess_request也会返回对象)

执行顺序:

按照注册的顺序,倒序执行

返回值:

​ HttpResponse:必须返回response对象

process_request执行流程

Django中间件 (middleware)

1.3 process_view

process_view(self, request, view_func, view_args, view_kwargs)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

执行时间: 视图函数之前,process_request之后

参数: request

request 和视图函数中的的request是一个对象

view_func 视图函数

view_args 视图函数的位置参数

view_kwargs 视图函数的关键字参数

执行顺序:

按照注册的顺序进行执行

返回值:

返回值为none的时候, 执行顺序正常

返回值如果是HttpResponse, 后面的中间的process_view、视图函数都不执行,直接执行注册的最后一个中间件中的process_response方法,再倒叙执行之前的中间中process_response方法。

执行流程图

Django中间件 (middleware)

1.4process_exception

process_exception(self, request, exception)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

执行时间((触发条件)): 视图函数之后,视图层面有错时才执行

参数: request/exception

request 和视图函数中的的request是一个对象

exception 视图中的错误对象

执行顺序:

按照注册的顺序 倒叙执行

返回值:

返回值为none的时候, 交给下一个中间件取处理异常,都没有处理交由django处理异常

返回值如果是HttpResponse, 后面的中间件的process_exception不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。

流程图

Django中间件 (middleware)

1.5process_template_response

process_template_response(self,request,response)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

执行时间((触发条件)): 视图函数之后,视图返回的是一个templateResponse对象(跟render用法类似)

参数: ,request,response

request 和视图函数中的的request是一个对象

response templateResponse对象

执行顺序:

按照注册的顺序 倒叙执行

返回值:

HttpResponse:必须返回response对象

流程图

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzysyj.html