在Django应用程序中,我有两个中间件。
一个名为NoWWWRedirectMiddleware
,其目的是将www
重定向到no www
。
第二个叫XForwardedForMiddleware
。它使用REMOTE_ADDR
的第一个值(如果存在)填充HTTP_X_FORWARDED_FOR
。
我的问题是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',
我的问题是:不应该排在前两位吗?我对如何订购这些产品感到朦胧,而且我目前正处于直觉中。
答案 0 :(得分:2)
在请求阶段,在调用视图之前,Django按照MIDDLEWARE中自上而下定义的顺序应用中间件。
所以看起来你的顺序是正确的 - 如果要将用户重定向到no www
,设置远程地址变量没有意义。作为旁注 - 从www
重定向到no www
应该由Web服务器(Apache / Nginx)完成,这样会更有效。