Solución:
Actualización: esta respuesta es de 2011. CSRF es fácil hoy.
En estos días debería utilizar el render
función de atajo return render(request, 'template.html')
que usa RequestContext
automáticamente, por lo que el siguiente consejo está desactualizado por 8 años.
- Usar
render
https://docs.djangoproject.com/en/2.2/topics/http/shortcuts/ - Agregue el middleware CSRF https://docs.djangoproject.com/en/2.2/ref/csrf/
- Utilizar el
{% csrf_token %}
etiqueta de plantilla - Confirme que ve el valor del token CSRF que se está generando y enviado en su solicitud de formulario
Respuesta original
Supongo que tiene la etiqueta en la plantilla pero no muestra nada (¿o quiso decir que confirmó en el HTML real que se está generando un token CSRF?)
Cualquiera de los dos usos RequestContext
en lugar de un diccionario
render_to_response("foo.html", RequestContext(request, {}))
O asegúrate de tener django.core.context_processors.csrf
en tus CONTEXT_PROCESSORS
configuración.
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
O agregue el token a su contexto manualmente
Solo agregue esto a sus vistas
return render_to_response("register.html", {'form': form, }, context_instance = RequestContext(request))
¡¡Funcionará!!
Intenta usar hacer en lugar de render_to_response:
from django.shortcuts import render
render(request, "foo.html", {})
Django: ¿cuál es la diferencia entre render (), render_to_response () y direct_to_template ()?
Como se indica en el enlace anterior, se introdujo en Django 1.3 y usa automáticamente RequestContext