Jquery y Django CSRF Token

Tengo 2 páginas html.

Una página para padres y una página para niños. La página secundaria contiene un botón Enviar que ejecuta el código en la página principal para enviar un mensaje Ajax.

Cargo la página secundaria utilizando el método $ .load () y luego, cuando se hace clic en el botón, se ejecuta el método $ .ajax .POST. Este método de publicación solo pasa una cadena JSON al código de Python.

Cuando hago esto en cualquier navegador, excepto IE, funciona bien. Sin embargo cuando ejecuto este código en IE. Recibo errores de Python / Django sobre los tokens CSRF.

Creo que la razón es porque la página secundaria es solo una actualización de la página actual con el código del lado del servidor que se está ejecutando.

¿Alguien sabe cómo debo hacer para que esto funcione?

Aclamaciones,

No estás pasando el token csrf con POST . Intenta hacer lo que he hecho en los datos . Eso es buscar el token csrf (o su propio método) y pasarlo en sus argumentos.

$.ajax({ url : url, type: "POST", data : {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value}, dataType : "json", success: function( data ){ // do something } }); 

Si está enviando un cuerpo de solicitud POST, tal vez sea más fácil agregar el token csrf como encabezado de solicitud. Encuentro este enfoque más fácil de leer, ya que no llena el cuerpo de la solicitud con un token. La mayoría de las solicitudes de AJAX enviarán el token csrf como encabezado, como lo sugiere la documentación de Django.

 function startTest(testId) { var payload = JSON.stringify({ test_id : testId }); $.ajax({ url: "/test-service/", method: "POST", headers: {'X-CSRFToken': '{{ csrf_token }}'}, data: payload, dataType: "json" }).done(function(response) { console.log(response.id + " " + response.name); }).fail(function (error) { console.log(error); }); } 

De los documentos en CSRF y AJAX:

El token CSRF también está presente en el DOM, pero solo si se incluye explícitamente utilizando csrf_token en una plantilla. La cookie contiene el token canónico; CsrfViewMiddleware preferirá la cookie al token en el DOM. En cualquier caso, está garantizado que tendrá la cookie si el token está presente en el DOM, por lo que debe usar la cookie.

Ejemplo (también de los documentos)

 // using jQuery function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken'); 

O podría utilizarse cualquier otra forma de interactuar con las cookies.