配置错误:中间件模块“django.middleware.csrf”未定义“CsrfResponseMiddleware”类

5 投票
3 回答
11285 浏览
提问于 2025-04-17 10:46

我在本地开发环境中没有遇到这个问题,但我刚刚用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',因为它可能会引发安全问题。

此外,还有两件事情必须做。

  1. 在你的表单中添加一个{% csrf_token %}标签。
  2. 在所有相关的views.py文件中,使用RequestContext,而不是Context
4

看起来你部署的服务器上安装的Django版本比较旧。还有,Penthi说得对,CsrfResponseMiddleware是为了兼容旧版本的,应该把它去掉。你可以查看这个链接了解更多信息:https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method

撰写回答