Неправильно настроено: модуль промежуточного программного обеспечения "django.middleware.csrf" не определяет класс "CsrfResponseMiddleware" - PullRequest
5 голосов
/ 21 января 2012

У меня нет этой проблемы в моей локальной среде разработки, но я просто развернул приложение с помощью 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 ]

4 голосов
/ 21 января 2012

Похоже, что сервер, на котором вы развернули, имеет другую версию Django (старая). Также Penthi прав, CsrfResponseMiddleware для обратной совместимости и должен быть удален. https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method.

4 голосов
/ 03 октября 2012

В Django 1.4 вы должны удалить 'django.middleware.csrf.CsrfResponseMiddleware', потому что это может вызвать проблемы с безопасностью.

Кроме того, необходимо сделать две вещи.

  1. Добавить {% csrf_token %} отметьте на своем посте.
  2. Используйте RequestContext вместо Context во всех ваших относительных файлах views.py.
1 голос
/ 21 января 2012

В Django 1.3 у меня в промежуточном программном обеспечении только django.middleware.csrf.CsrfViewMiddleware для обеспечения защиты CSRF

...