django进阶(十)之中间件设置
基础设置
说明:
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。(请求先通过中间件,在访问views函数,在返回回来)在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,如下图:
所有的中间件均继承MiddlewareMixin 类方法(csrf.py文件里),并且django中间件最多有5个方法:
- process_request - process_view - process_response - process_exception - process_render_template

执行流程
请求进来执行所有的process_request
先做路由匹配,执行view找到函数(不执行)--->回到settings执行所有的processview(中间件),然后执行视图函数,然后执行response在返回,返回的方法中如果有render 方法,template也会被执行
编写一个中间件示例
示例一
from django.utils.deprecation import MiddlewareMixin class one(MiddlewareMixin): def process_request(self,request): print ("one") def process_response(self,request,response): print("one_middleware") return response class two(MiddlewareMixin): def process_request(self,request): print ("two") def process_response(self,request,response): print("two_middleware") return response class three(MiddlewareMixin): def process_request(self,request): print ("three") def process_response(self,request,response): print ("threee_middleware") return response

views.py
def middleware(request): print ("views_test_middleware") return HttpResponse("test_middleware")

在settings.py里注册中间件

执行结果

总结: django生命周期为,先走中间件,请求(打印出 one,two,three),然后走views(打印出views_test_middleware),然后通过中间件回应(respones,打印 最后三行threee_middleware,two_middleware,one_middleware)
示例二


process_views函数
def process_view(self, request, callback, callback_args, callback_kwargs):

执行结果:

访问及响应顺序为,先返回request的值,在返回process_views的值,在返回views.py内定义的函数的值,最后返回response的值

浙公网安备 33010602011771号