中间间的作用:
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()函数作用
改变路径,也就是到那个中间件,之后,又返回重新执行。
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_args
和view_func_kwargs
就是函数参数。