首页 > 其他 > 详细

Django 中间件理解

时间:2020-07-22 13:56:16      阅读:75      评论:0      收藏:0      [点我收藏+]

中间件

django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

应用场景,对所有请求统一进行处理,例如做身份验证、黑名单检测等

在django项目的settings模块中,有一个 MIDDLEWARE变量,其中每一个元素就是一个中间件,如下图。

技术分享图片

 

一个请求的往返都会经过中间件过滤。路径图如下;

 技术分享图片

 

与mange.py在同一目录下的文件夹 Middle下的mi.py文件中的Row1

中间件中可以定义四个方法,分别是:

  • process_request(self,request)
  • process_view(self, request, callback, callback_args, callback_kwargs)
  • process_template_response(self,request,response)
  • process_exception(self, request, exception)
  • process_response(self, request, response)

以上方法的返回值可以是None和HttpResonse对象,如果是None,则继续按照django定义的规则向下执行,如果是HttpResonse对象,则直接将该对象返回给用户。

技术分享图片

 

 

 

自定义中间件

1、创建中间件类m1.py

技术分享图片

 

 m1.py

from django.utils.deprecation import MiddlewareMixin


class Row1(MiddlewareMixin):
    def process_request(self, request):
        print(request Row1 )
    def process_response(self,request,response):
        print(Row1-Response)
        return response
    

class Row2(MiddlewareMixin):
    def process_request(self, request):
        print(request Row2 )
    def process_response(self,request,response):
        print(Row2-Response)
        return response

class Row3(MiddlewareMixin):
    def process_request(self, request):
        print(request Row3 )
    def process_response(self,request,response):
        print(Row3-Response)
        return response

2、注册中间件

MIDDLEWARE = [
    django.middleware.security.SecurityMiddleware,
    django.contrib.sessions.middleware.SessionMiddleware,
    django.middleware.common.CommonMiddleware,
    django.middleware.csrf.CsrfViewMiddleware,
    django.contrib.auth.middleware.AuthenticationMiddleware,
    django.contrib.messages.middleware.MessageMiddleware,
    django.middleware.clickjacking.XFrameOptionsMiddleware,
    Middle.m1.Row1,
    Middle.m1.Row2,
    Middle.m1.Row3,
]

访问:

技术分享图片

 

 测试中间process_response(self, request, response)返回HttpResonse对象,则直接将该对象返回给用户。

class Row2(MiddlewareMixin):
    def process_request(self, request):
        print(request Row2 )
    def process_response(self,request,response):
        print(Row2-Response)
        # return response
        return HttpResponse(OK)

结果,任何请求到中间逻辑被返回

技术分享图片

 

 





 

Django 中间件理解

原文:https://www.cnblogs.com/zhangmingda/p/13359654.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!