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的值

posted @ 2018-05-03 15:40  FRESHMANS  阅读(231)  评论(0)    收藏  举报