定制 Django 中间件的订购
Ordering of custom Django middleware
在 Django 应用程序中,我有两个中间件。
一个叫做NoWWWRedirectMiddleware
,它的目的是重定向www
到no www
。
第二个叫做XForwardedForMiddleware
。它用 HTTP_X_FORWARDED_FOR
的第一个值(如果存在)填充 REMOTE_ADDR
。
我的问题是关于 settings.py
中的中间件排序。目前,我是这样订购的:
'myproj.middleware.NoWWWRedirect.NoWWWRedirectMiddleware',
'myproj.middleware.XForwardedFor.XForwardedForMiddleware',
################## Other Middleware ###################
'user_sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
我的问题是:前两个不应该反过来吗?我不清楚如何订购它们,目前正在凭直觉进行。
During the request phase, before calling the view, Django applies middleware in the order it’s defined in MIDDLEWARE, top-down.
所以看来您的顺序是正确的 - 如果用户要重定向到 no www
,则设置远程地址变量没有任何意义。作为旁注 - 从 www
重定向到 no www
应该由网络服务器(Apache / Nginx)完成,这样会更有效率。
在 Django 应用程序中,我有两个中间件。
一个叫做NoWWWRedirectMiddleware
,它的目的是重定向www
到no www
。
第二个叫做XForwardedForMiddleware
。它用 HTTP_X_FORWARDED_FOR
的第一个值(如果存在)填充 REMOTE_ADDR
。
我的问题是关于 settings.py
中的中间件排序。目前,我是这样订购的:
'myproj.middleware.NoWWWRedirect.NoWWWRedirectMiddleware',
'myproj.middleware.XForwardedFor.XForwardedForMiddleware',
################## Other Middleware ###################
'user_sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
我的问题是:前两个不应该反过来吗?我不清楚如何订购它们,目前正在凭直觉进行。
During the request phase, before calling the view, Django applies middleware in the order it’s defined in MIDDLEWARE, top-down.
所以看来您的顺序是正确的 - 如果用户要重定向到 no www
,则设置远程地址变量没有任何意义。作为旁注 - 从 www
重定向到 no www
应该由网络服务器(Apache / Nginx)完成,这样会更有效率。