jquery - framework - token ajax django




Jquery y Django CSRF Token (2)

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,


De los docs 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.


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
    }
});






csrf