He estado tratando de resolver el mismo problema, y como arnaud576875 dice que tiene que agregar el encabezado token csrf en cada solicitud ajax como los documentos de Django dice https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax Y ejecutar ese código antes de realizar cualquier solicitud Ajax.
Pero hay algo más, tienes que encontrar la forma de cargar el token csrf en las cookies de tu aplicación antes de intentar hacer cualquier solicitud AJAX, después de muchas horas dolorosas investigando no pude encontrar una respuesta específica de cómo hacer esto, lo que hice fue que para asegurar que su vista envíe el token csrf dentro de una cookie, puede usar el ensure_csrf_token()
para cada vista que desee que reciba el token https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.ensure_csrf_cookie, esto parece funcionar para mucha gente, pero no funcionó para mí
Otra forma es utilizar el Método Legacy, agregando el 'django.middleware.csrf.CsrfResponseMiddleware'
a su MIDDLEWARE_CLASSES
pero no recomiendo este método porque deja varios riesgos de seguridad. https://docs.djangoproject.com/en/1.2/ref/contrib/csrf/#legacy-method
Todos estos métodos que dije antes no funcionaron para mí. La forma en que estoy permitiendo Ajax para hacer algunas peticiones es como el siguiente, y si alguien encuentra este un método peligroso por favor hágamelo saber:
- Ir a la primera vista de que el usuario llegará, al igual que el/inicio/página.
- insertar este antes de redirigir o analizar cualquier cosa
request.META["CSRF_COOKIE_USED"] = True
Y eso es, eso es la forma en que funciona para mí, pero como he dicho antes No estoy seguro de si este es el método correcto o el más seguro uno para lograr la protección csrf.
Creo que puede encontrar su respuesta [aquí] (https://docs.djangoproject.com/en/dev/ref/contrib/csrf/). La solución más simple parece estar deshabilitando la protección CSRF en la instancia de django. La siguiente mejor opción es actualizar su inicio de sesión de JavaScript para tomar el token CSRF de django del formulario e incluirlo como parte de la solicitud de AJAX. – aroth
Eche un vistazo a mi respuesta anterior. http://stackoverflow.com/questions/6506897/csrf-token-missing-or-incorrect-while-post-parameter-via-ajax-in-django/6533544#6533544 – sigurd