前言
系列文章目录
[Python]目录
视频及资料和课件
链接:
https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234
提取码:1234
1. 中间件简介
中间件就是伴随请求和响应的时候会发生的事情。
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。
中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
2. 中间件的定义
定义中间件,就是在请求的处理函数外再包一层函数。即使用闭包修饰请求的处理函数。
中间件的应用场景:例如,中间件可以在进行相应的请求处理前,判断用户是否登录过
# 定义一个中间件
# 在请求处理前输出 before request
# 在请求处理后输出 after request
# 参数get_response为请求的处理函数
def simple_middleware(get_response):
def middleware(request):
print('before request')
# 调用请求的处理函数处理请求
response = get_response(request)
print('after request')
# 返回请求的响应
return response
# 返回中间件处理后的请求处理函数
return middleware
3. 中间件的注册
4. 中间件测试
中间件在每次请求和响应都会调用,不管调用任何请求都会触发中间件
5. 多个中间件的执行顺序
- 在请求视图(请求处理函数)处理前,中间件由上至下依次执行
- 在请求视图(请求处理函数)处理后,中间件由下至上依次执行
定义两个中间件:
# 定义一个中间件
# 在请求处理前输出 before request
# 在请求处理后输出 after request
# 参数get_response为请求的处理函数
def simple_middleware1(get_response):
def middleware(request):
print('before request 111111111111111111')
# 调用请求的处理函数处理请求
response = get_response(request)
print('after request 111111111111111111')
# 返回请求的响应
return response
# 返回中间件处理后的请求处理函数
return middleware
def simple_middleware2(get_response):
def middleware(request):
print('before request 222222222222222222222')
# 调用请求的处理函数处理请求
response = get_response(request)
print('after request 222222222222222222222')
# 返回请求的响应
return response
# 返回中间件处理后的请求处理函数
return 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',
# 注册中间件
'login.middleware.simple_middleware1',
'login.middleware.simple_middleware2'
]
6. 补充
def simple_middleware(get_response):
# 中间件第一次执行,会执行此处代码
def middleware(request):
print('before request')
# 调用请求的处理函数处理请求
response = get_response(request)
print('after request')
# 返回请求的响应
return response
# 返回中间件处理后的请求处理函数
return middleware
过滤路径需要通过类中间件实现。
以类的形式实现中间件:
Django—中间件详解
版权声明:本文为m0_53022813原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。