不正确的配置:中间件模块“django.middleware.csrf”没有定义“CsrfResponseMiddleware”类

时间:2012-01-21 14:35:18

标签: python django middleware

我在本地开发环境中没有这个问题,但我刚刚使用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 个答案:

答案 0 :(得分:4)

看起来您部署的服务器具有不同版本的Django(旧版本)。 Penthi也是正确的,CsrfResponseMiddleware是为了向后兼容,应该删除。 https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method

答案 1 :(得分:4)

在Django 1.4中,您应该删除“django.middleware.csrf.CsrfResponseMiddleware”,因为它可能会导致安全问题。

此外,还有两件事要做。

  1. 在帖子表单中添加{% csrf_token %}标记。
  2. 在所有相关的views.py文件中使用RequestContext代替Context

答案 2 :(得分:1)

在Django 1.3中,我的中间件中只有django.middleware.csrf.CsrfViewMiddleware才能使CSRF保护工作