中间件的实例化是从下到上吗?
来源:7-7 Django Middleware 中间件
![](http://img1.sycdn.imooc.com/user/5b97ee2c0001286a07370741-100-100.jpg)
strValue
2020-02-01
我在进行中间件的学习过程中,发现如果我实现了两个中间件添加到MIDDLEWARE顺序如下时:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'ops.middlewaredemo.MiddlewareTest', # 自己编写的一个测试中间件
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'ops.middlewaredemo.MiddlewareTest2', # 自己编写的一个测试中间件2
]
除了发现在调用过程中如老师所说的,执行两次,并且前后的倒序关系,还发现了在实例化中间件的时候,是从后往前的顺序,简略日志如下:
Build MiddlwewareTest2
Build MiddlwewareTest
Middleware Test before request
Middleware2 Test before request
……(request里面处理的日志打印)
Middleware Test2 before request
Middleware Test before request
写回答
1回答
-
这个问题有点难,需要看Django源码才行,印象中是倒序的,在Django中间件Mixin中应该有个方法叫load_middleware(),你可以查一下这个函数的实现,估计和你的实践结论是一致的。
012020-02-09
相似问题