Django(中间件)

Posted gaoyukun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django(中间件)相关的知识,希望对你有一定的参考价值。

技术分享图片

一.django生命周期:用户通过一个个的中间件,访问路由映射,通过views函数,再同样的路径返回(如上图)

二.中间件写法:

1.新建mid模块,模块下新建middle.py
------------middle.py
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse

class MYMiddlewareMixin(MiddlewareMixin):                        #自定义类,用时拷贝即可
    def __init__(self, get_response=None):
        self.get_response = get_response
        super().__init__()

    def __call__(self, request):
        response = None
        if hasattr(self, process_request):                     #判断类中是否有process_request(),名字可以更改
            response = self.process_request(request)
        if not response:
            response = self.get_response(request)
        if hasattr(self, process_response):
            response = self.process_response(request, response)
        return response


class GYK(MYMiddlewareMixin):
    def process_request(self,request):        #1请求
        print("11")
        # return HttpResponse("你大爷")         #如果有return,不会执行下一个中间件
    def process_response(self,request,response):   #4返回
        print("22")
        return response
class BYK(MYMiddlewareMixin):
    def process_request(self,request):        #2
        print("33")
    def process_response(self,request,response):   #3
        print("44")
        return response



-------------settings.py(csrf也是中间件)
ps:以下中间件按照顺序执行
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‘,
"app01.mid.middle.GYK",
"app01.mid.middle.BYK",
]


-------------urls.py
urlpatterns = [
path(‘admin/‘, admin.site.urls),
path("middle/",views.middle),
]

---------------views.py
def middle(req):
return HttpResponse("Test")


ps:因为中间件按照顺序执行,所以打印结果为:
1.11
2.33
3.44
4.22

一般的执行顺序:1.先执行请求函数process_request 2.执行views函数 3.再执行回应函数process_response。views.py函数中返回“Test”,传给BYK中的response,再传给GYK中的response,再返回给客户。
二般的执行顺序:如果A中间件的process_request()有return HttpResponse("xxx"),不会执行下一个中间件,也不会执行到views.py函数,只执行A中间件,返回给用户xxx
只有将自定义的中间件添加进settings.py中才能执行

 




































以上是关于Django(中间件)的主要内容,如果未能解决你的问题,请参考以下文章

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

django-中间件

django之设置中间件模板

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]