本文转发自:https://www.cnblogs.com/open-yang/p/11222521.html

Django之请求生命周期

 

settings.py中间件执行

 

 django请求生命周期

django请求生命周期

 

 

 

 

自定义中间件的配置:

(1)任意新建一个py文件,导入模块from django.utils.deprecation import MiddlewareMixin

(2)在py文件中自定义中间件类,必须继承 MiddlewareMixin 类

(3)在settings.py文件的MIDDLEWARE列表中进行配置,追加新建的中间件py文件类

 

自定义中间件类中定义的五个方法:

(1)process_request(self, request)【常用】

 

·wsgi.py进行socket封装之后,urls.py控制器路由分发之前,对所有的请求对象request都执行的函数

·process_request函数参数中要有封装好的request对象,这视图函数的request一样

·process_request方法是按MIDDLEWARE列表中的中间件类顺序执行

·如果想指定请求绕过此中间件的该方法,可设置白名单进行请求判断

·process_request函数只有在无返回值或者返回值为None时才会继续执行后续中间件的process_request方法,否则就会终止后续程序执行,直接返回该return的response对象

 

 

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

 

·urls.py控制器路由分发之后,views.py视图函数执行之前

·process_view函数参数中要有封装好的request对象,视图函数名view_func视图函数参数view_args,view_kwargs

·process_view方法是按MIDDLEWARE列表中的中间件类顺序执行

 

(3)process_exception(self,request,exception)

·views.py视图函数执行过程中,捕获异常,自动触发

·process_exception函数参数要有封装好的request对象,异常类型exception

·process_exception方法方法是按MIDDLEWARE列表中的中间件类逆序执行

 

(4)process_template_response(self,request,response)

·views.py视图函数执行过程中,response对象中必须定义了render()方法

·process_template_response函数参数要有封装好的request对象和响应的response对象

·process_template_response方法是按MIDDLEWARE列表中的中间件类逆序执行

 

5process_response(self,request,response)【常用】

 

·views.py视图函数执行响应response对象,wsgi.py响应send之前,对所有的响应对象response都执行的函数

·process_response函数参数要有封装好的request对象和响应的response对象

·process_response方法是按MIDDLEWARE列表中的中间件类逆序执行

·在process_response函数中必须加上return,否则报错,return response是视图函数响应对象时,会进行接力响应,如果在任意process_response中rerun了自定义的内容,响应结果即为MIDDLEWARE列表中索引最小的中间件类的return结果

 

 

自定义中间件类方法执行顺序

 

 django请求生命周期

 django请求生命周期

 

 

中间件的应用案例:

1、做IP访问频率限制

某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。

2URL访问过滤

如果用户访问的是login视图(放过)

如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!

相关文章: