django中间件-12
2024-09-26 11:33:33
在django中,中间件其实就是一个类,他是一个可以介入django的 request
和 response
的钩子框架,在请求响应不同的阶段,执行类中不同的代码,用于在全局修改django的输入输出。
自定义中间件
自定义中间件有两种方式,使用函数定义,和使用类定义。
自定义中间件一般定义在项目目录或者‘应用目录下的 middleware.py
文件下。
函数定义
def simple_middleware(get_response):
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
def middleware(request):
# 此处编写的代码会在每个请求处理视图前被调用。
response = get_response(request)
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
return middleware
示例
def simple_middleware(get_response):
print("django被初始化")
def middleware(request):
print("请求")
response = get_response(request)
print("响应")
return response
return middleware
访问视图执行结果
django被初始化
[20/Oct/2018 09:44:54] "POST /middleware HTTP/1.1" 200 12
请求
视图函数
响应
类定义
class SimpleMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
def __call__(self, request):
# 此处编写的代码会在每个请求处理视图前被调用。
response = self.get_response(request)
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
示例
class SimpleMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
print("初始化")
def __call__(self, request):
print("请求")
response = self.get_response(request)
print("响应")
return response
访问视图执行结果
django初始化
[20/Oct/2018 10:13:34] "POST /middleware HTTP/1.1" 200 12
请求
视图函数
响应
与旧版本中间件的兼容
在Django 1.10版本之前,中间件设置名为MIDDLEWARE_CLASSES,是长这样的:
class Middleware(MiddlewareMixin):
def __init__(self, get_response=None):
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
self.get_response = get_response
def process_request(self, request):
# 此处编写的代码会在每个请求处理视图前被调用。
def process_response(self, request, response):
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
示例
class Middleware(MiddlewareMixin):
def __init__(self, get_response=None):
print("django初始化")
self.get_response = get_response
def process_request(self, request):
print("请求")
def process_response(self, request, response):
print("响应")
return response
访问视图执行结果
django初始化
[20/Oct/2018 10:13:34] "POST /middleware HTTP/1.1" 200 12
请求
视图函数
响应
- 参数get_response代表被访问的视图函数
中间件的执行顺序
中间件的执行顺序和注册顺序有关系。在视图函数处理前,会按注册顺序从上往下执行。在属兔函数处理后,会按注册顺序从上往下执行, 在初始化的时候,也是从下往上执行。
示例
定义两个中间件
def simple_middleware(get_response):
print("django被初始化")
def middleware(request):
print("请求")
response = get_response(request)
print("响应")
return response
return middleware
class SimpleMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
print("初始化")
def __call__(self, request):
print("请求")
response = self.get_response(request)
print("响应")
return response
注册顺序
MIDDLEWARE = [
'middleware.middleware.simple_middleware',
'middleware.middleware.SimpleMiddleware',
执行结果
初始化2
django被初始化1
请求1
请求2
视图函数
响应2
响应1
最新文章
- C# 判断文件有没占用
- sort详解2
- bat调用bat的一个巨坑
- HTML: 用表格畫出課程表
- 【转】shell脚本调试(bash trap support bashdb )
- JAVA NIO 类库的异步通信框架netty和mina
- MP3的频率、比特率、码率与音质的关系
- PHP高效的敏感词过滤方法
- 从原理角度解析Android (Java) http 文件上传
- servlet多次跳转报IllegalStateException异常
- Python3基础 函数 关键字参数 的示例
- 深度剖析HashMap的数据存储实现原理(看完必懂篇)
- postgrel执行VACUUM报VACUUM cannot run inside a transaction block
- Spring基础系列-Spring事务不生效的问题与循环依赖问题
- UOJ #207. 共价大爷游长沙(LCT + 异或哈希)
- FatFs文件系统的移植
- 【转】Winform程序未捕获异常解决方法 EventType clr20r3 P1
- Python并发编程二(多线程、协程、IO模型)
- C++原型模式和模板模式
- BZOJ3772精神污染
热门文章
- Multiple Database Block Sizes and the Buffer Cache
- 5.FileWriter 和 BufferWriter
- Oracle案例10——HWM(高水位线)性能优化
- 关于springMVC的一些xml配置
- C# 输入一个整数,求质因数
- 【matlab】 幂法 求解最大特征值
- CDN高级技术专家周哲:深度剖析短视频分发过程中的用户体验优化技术点
- Office 365实现单点登录系列(2)—Azure AD Connect安装与配置
- 解决Failed to load the JNI shared library xxx/xxx/jvm.dll 错误
- Hadoop HBase概念学习系列之HBase里的长表VS宽表VS窄表(十五)