Django之请求生命周期

时间:2022-12-14 10:31:49

settings.py中间件执行

 

 Django之请求生命周期

自定义中间件的配置:

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

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

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

 

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

1process_request(self, request)【常用】

 

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

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

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

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

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

 

 

2process_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列表中的中间件类顺序执行

 

3process_exception(self,request,exception)

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

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

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

 

4process_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_responsererun了自定义的内容,响应结果即为MIDDLEWARE列表中索引最小的中间件类的return结果

 

 

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

 

 Django之请求生命周期

 Django之请求生命周期

 

 

中间件的应用案例:

1、做IP访问频率限制

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

2URL访问过滤

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

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