中间件的实例化是从下到上吗?

来源:7-7 Django Middleware 中间件

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回答

咚咚呛

2020-02-01

这个问题有点难,需要看Django源码才行,印象中是倒序的,在Django中间件Mixin中应该有个方法叫load_middleware(),你可以查一下这个函数的实现,估计和你的实践结论是一致的。

0
1
strValue
好的, 谢谢老师。
2020-02-09
共1条回复

Django+小程序技术打造微信小程序助手

0到1完整项目实战过程,是难得的Django+小程序全栈项目体验。

991 学习 · 507 问题

查看课程