配置错误:中间件模块“django.middleware.csrf”未定义“CsrfResponseMiddleware”类
我在本地开发环境中没有遇到这个问题,但我刚刚用nginx和gunicorn部署了应用(这是我第一次部署应用),每当我尝试发送请求时,就会出现这个错误追踪。
2012-01-21 22:24:36 [5712] [ERROR] Error handling request
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.7/gunicorn/workers/sync.py", line 96, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/usr/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__
self.load_middleware()
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 51, in load_middleware
raise exceptions.ImproperlyConfigured('Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname))
ImproperlyConfigured: Middleware module "django.middleware.csrf" does not define a "CsrfResponseMiddleware" class
以下是我settings.py文件的一部分
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
有没有人能给我一些建议,帮我找到解决办法?
3 个回答
1
在Django 1.3中,我的中间件里只有django.middleware.csrf.CsrfViewMiddleware这个,用来实现CSRF保护。
4
在Django 1.4中,你应该去掉'django.middleware.csrf.CsrfResponseMiddleware
',因为它可能会引发安全问题。
此外,还有两件事情必须做。
- 在你的表单中添加一个
{% csrf_token %}
标签。 - 在所有相关的views.py文件中,使用
RequestContext
,而不是Context
。
4
看起来你部署的服务器上安装的Django版本比较旧。还有,Penthi说得对,CsrfResponseMiddleware
是为了兼容旧版本的,应该把它去掉。你可以查看这个链接了解更多信息:https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method。