前言
系列文章目录
视频及资料和课件
链接: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—中间件详解