码迷,mamicode.com
首页 > 其他好文 > 详细

对django中间件的理解

时间:2019-06-01 19:50:38      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:int   流程   djang   tin   llb   inf   return   请求   strong   

1. 什么是中间件(Django)?

  对Django而言,中间件就是继承自MiddlewareMixin(位于django.utils.deprecation模块下)的类,该类对请求(request)及响应(response)的过程按照规则执行相应的控制方法,达到访问控制,权限管理,请求认证,数据缓存等等效果。

  在django2.x中,项目会默认开启以下中间件,通过查看这些中间件的源码可以得知,

  基本上这些内置中间件都重写了基类的process_request(request, *args, **kwargs)以及process_response(request, response *args, **kwargs)方法, 

  中间件(CsrfViewMiddleware等)重写了process_view(self, request, callback, callback_args, callback_kwargs)

  视图(views)执行过程中的错误处理则是通过process_exception(self, request, exception)来控制。

  技术图片

2. 中间件所涉及的四种方法

  process_request(request, *args, **kwargs)

  process_view(self, request, callback, callback_args, callback_kwargs)

  process_response(request, response *args, **kwargs)          ------process_template_response(self,request,response)

  process_exception(self, request, exception)

3. 中间件方法的执行顺序

  技术图片

3. 自定义中间件并测试其执行流程

  我们在项目目录(与settings.py同级)下创建middleware包, 并新建test模块其内容如下:

from django.utils.deprecation import MiddlewareMixin

class ProcessMiddleware1(MiddlewareMixin):

    def __str__(self):
        return middleware 1

    def process_request(self, request):
        print(%s:\t [%s] % (self.__str__(), process_request))
    def process_view(self, *args):
        print(%s:\t [%s] % (self.__str__(), process_view))
    def process_response(self, request, response):
        print(%s:\t [%s] % (self.__str__(), process_response))
        return response

class ProcessMiddleware2(MiddlewareMixin):

    def __str__(self):
        return middleware 2

    def process_request(self, request):
        print(%s:\t [%s] % (self.__str__(), process_request))
    def process_view(self, *args):
        print(%s:\t [%s] % (self.__str__(), process_view))
    def process_response(self, request, response):
        print(%s:\t [%s] % (self.__str__(), process_response))
        return response

class ProcessMiddleware3(MiddlewareMixin):

    def __str__(self):
        return middleware 3

    def process_request(self, request):
        print(%s:\t [%s] % (self.__str__(), process_request))
    def process_view(self, *args):
        print(%s:\t [%s] % (self.__str__(), process_view))
    def process_response(self, request, response):
        print(%s:\t [%s] % (self.__str__(), process_response))
        return response

  运行结果:

  技术图片

 

  

对django中间件的理解

标签:int   流程   djang   tin   llb   inf   return   请求   strong   

原文地址:https://www.cnblogs.com/kisun168/p/10959820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!