2012-01-21 14 views
5

Nie mam tego problemu w moim lokalnym środowisku programistycznym, ale właśnie wdrożyłem aplikację z nginx + gunicorn (po raz pierwszy wdrożenie app) i otrzymuję to traceback za każdym razem, gdy próbuję złożyć wniosek.Nieprawidłowo skonfigurowane: moduł oprogramowania pośredniego "django.middleware.csrf" nie definiuje klasy "CsrfResponseMiddleware"

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 

Poniżej znajduje się część mojego pliku 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', 
) 

ktoś może wskazać mi w dobrym kierunku?

Odpowiedz

4

Wygląda na serwerze, na którym rozmieszczone ma inną wersję Django (stary). Również Penthi ma rację, CsrfResponseMiddleware jest kompatybilny wstecz i powinien zostać usunięty. https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method.

+0

Właściwie powinien to być najnowszy, 1.3.1. Właśnie zainstalowałem go kilka dni temu. Poszedłem do pliku 'csrf.py' i odkryłem, że klasa' CsrfResponseMiddleware' w rzeczywistości nie jest tam zdefiniowana ... –

+0

Czy zainstalowałeś ją z bagażnika? Właśnie pobrałem archiwum 1.3.1, a plik 'csrf.py' ma' CsrfResponseMiddleware'. Ale został usunięty w bagażniku - https://code.djangoproject.com/browser/django/trunk/django/middleware/csrf.py?rev=15949 – demalexx

+0

ahh tak ... mam go z bagażnika ... pomyślałem, że otrzymywał 1.3.1! –

1

W Django 1.3, mam tylko django.middleware.csrf.CsrfViewMiddleware w moich middleware, aby uzyskać ochronę CSRF roboczą

4

W Django 1.4, należy usunąć "django.middleware.csrf.CsrfResponseMiddleware", ponieważ może to powodować problemy z bezpieczeństwem.

Ponadto należy zrobić dwie rzeczy.

  1. Dodaj znacznik {% csrf_token %} do formularza wiadomości.
  2. Użyj RequestContext zamiast Context we wszystkich względnych plikach views.py.
Powiązane problemy