Python - DjangoPython语言与信息数据获取和机器学习

Django - 中间件(Middleware)

2017-08-23  本文已影响296人  廖马儿

中间间的作用:
1)可以查看请求头中有没有指定的键值对。比如:给接口加密,请求的时候要一个请求头部。

Django中settings.py中的中间件配置:

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',
]

自己写中间件

1)我们在新建目录Middleware下新建了m1.py模块。

process_request()方法里面,没有return,就是没有阻隔,就直接执行通过。

from django.utils.deprecation import MiddlewareMixin

class M1(MiddlewareMixin):
    def process_request(self,request):
        print ('request - 经过M1')
    def process_response(self, request, response):
        print ('response - 经过M1')
        return response

class M2(MiddlewareMixin):
    def process_request(self, request):
        print ('request - 经过M2')
    def process_response(self, request, response):
        print ('response - 经过M2')
        return response

2)在MIDDLEWARE中注册我们的中间件。

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',
    'Middleware.m1.M1',
    'Middleware.m1.M2',
]

请求的时候,就会经过这两个中间件。
打印效果为:

request - 经过M1
request - 经过M2
-------
response - 经过M2
response - 经过M1

process_view()函数作用

改变路径,也就是到那个中间件,之后,又返回重新执行。

图片.png
class M2(MiddlewareMixin):
    def process_request(self, request):
        print ('request - 经过M2')

    def process_view(self, request, view_func, view_func_args, view_func_kwargs):
        print ('process_view - M2')

    def process_response(self, request, response):
        print ('response - 经过M2')
        return response

view_func就是views.py中的函数。
view_func_argsview_func_kwargs就是函数参数。

上一篇下一篇

猜你喜欢

热点阅读