Django's request lifecycle

settings.py middleware execution

 

 

Custom middleware configurations:

( 1 ) Create a new arbitrary py file, import module from django.utils.deprecation Import MiddlewareMixin

( 2 ) in py custom middleware class must inherit file MiddlewareMixin class

( 3 ) In settings.py file MIDDLEWARE configuration list, adding the new middleware py File Class

 

Method middleware five custom class definition:

1process_request(self, request)【常用】

 

·          WSGI. Py performed socket after packaging, the urls.py before the controller route distribution, all requests for objects request functions performed

·          Process_request function parameters have encapsulated request object, the view function request as

·          Process_request method is based on MIDDLEWARE execution order list of middleware classes

·          If you want to specify the request to bypass the process of this intermediate can request determination whitelist

·          Process_request function only if no return value or return value N One will continue during the subsequent intermediate process_request method, otherwise program execution will terminate the follow-up, directly back to the return of response objects

 

 

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

 

·          Urls.py After the distribution, the controller routing views.py before view function is executed

·          Process_view function parameters have encapsulated request object view function name view_func , view function parameters view_args , view_kwargs

·          Process_view method is based on MIDDLEWARE execution order list of middleware classes

 

3process_exception(self,request,exception)

·          Views.py during the execution of the function view, catch the exception, automatically trigger

·          Process_exception function parameters have encapsulated request object type exception exception

·          Process_exception method is to press MIDDLEWARE list of middleware classes to perform reverse

 

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结果

 

 

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

 

 

 

 

 

中间件的应用案例:

1、做IP访问频率限制

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

2URL访问过滤

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

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

 

Guess you like

Origin www.cnblogs.com/open-yang/p/11222521.html