2012-01-21 11 views
5

No tengo este problema en mi entorno de desarrollo local, pero acabo de implementar la aplicación con nginx + gunicorn (implementando por primera vez un aplicación) y obtengo este rastreo cada vez que intento hacer una solicitud.Configurado incorrectamente: El módulo de middleware "django.middleware.csrf" no define una clase "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 

La siguiente es una parte de mi archivo 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', 
) 

Alguien me puede apuntar en la dirección correcta?

Respuesta

4

Parece que el servidor donde tiene desplegado versión diferente de Django (una edad). También Penthi tiene razón, CsrfResponseMiddleware es por compatibilidad con versiones anteriores y debe eliminarse. https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method.

+0

En realidad debería ser el más reciente, 1.3.1. Lo acabo de instalar hace unos días. Entré en el archivo 'csrf.py' y encontré que la clase' CsrfResponseMiddleware' en realidad no está definida allí ... –

+0

¿Lo has instalado desde el tronco? Acabo de descargar el archivo 1.3.1 y el archivo 'csrf.py' tiene' CsrfResponseMiddleware'. Pero fue eliminado en el tronco - https://code.djangoproject.com/browser/django/trunk/django/middleware/csrf.py?rev=15949 – demalexx

+0

ahh sí ... lo obtuve en el maletero ... pensé que estaba obteniendo 1.3.1! –

1

En Django 1.3, sólo tengo en mis django.middleware.csrf.CsrfViewMiddleware middleware para obtener protección CSRF trabajo

4

En Django 1.4, debe eliminar el 'django.middleware.csrf.CsrfResponseMiddleware', ya que puede causar problemas de seguridad.

Además, se deben hacer dos cosas.

  1. Agregue una etiqueta {% csrf_token %} a su formulario de publicación.
  2. Use RequestContext en lugar de Context en todos sus archivos relativos views.py.
Cuestiones relacionadas