订购自定义Django中间件

时间:2017-07-25 23:04:57

标签: django django-middleware

在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',

我的问题是:不应该排在前两位吗?我对如何订购这些产品感到朦胧,而且我目前正处于直觉中。

1 个答案:

答案 0 :(得分:2)

来自documentation

  

在请求阶段,在调用视图之前,Django按照MIDDLEWARE中自上而下定义的顺序应用中间件。

所以看起来你的顺序是正确的 - 如果要将用户重定向到no www,设置远程地址变量没有意义。作为旁注 - 从www重定向到no www应该由Web服务器(Apache / Nginx)完成,这样会更有效。