9
votes

Comment utiliser $ .post avec Django?

Comment puis-je utiliser le jquery.post () méthode dans django?

C'est ce que j'essaie de faire: xxx

Comment est-ce que CSRF protège cela à Django? Existe-t-il un moyen d'ajouter au jeton CSRF aux données de poste?


2 commentaires

Je pense que vous voulez vraiment demander "Comment puis-je soumettre des demandes AJAX à Python", n'est-ce pas? Il n'y a pas de méthode "jquery.post ()" dans n'importe quelle autre langue ou cadre autre que JQuery. Vous demandez l'opération équivalente, correct?


@Mike je crois qu'il demande comment utiliser jQuery pour poster des données à django, je modifierai le titre (encore) pour le rendre plus clair


4 Réponses :


0
votes

Le module contribuer dans django a un CSRF Module que vous pouvez utiliser.

quant à votre question Comment envoyer un Post , tant que vous aurez l'URL mappée correctement les demandes seront envoyées à elle. Vous pouvez gérer une demande spécifiquement en cochant demande.post sur l'objet de la demande.


1 commentaires

Je parle spécifiquement de la méthode $ .post .post. La raison pour laquelle j'ai posé cette question est que je ne voulais pas avoir à traiter d'un script aussi lourd.



34
votes

Oui. Je crois que c'est stocké dans {{csrf_token}} code>. Donc, juste faire

     var postdata={
          'username':$('#login-email').val(), 
          'password':$('#login-password').val(),
          'csrfmiddlewaretoken': '{{ csrf_token }}'
     }


4 commentaires

Son {% csrf_token%} sinon ceci est de loin la meilleure solution.


Whoops je voulais dire {{csrf_token}} L'autre variante est la variante de champ de formulaire masqué! Désolé d'avoir confiné le sujet :)


'CSRFMIDDLEWareToken': '{{csrf_token}}' a travaillé pour moi, sur Django-1.3


aussi, sur 1.3 il semble qu'il soit obligé d'être csrfmiddlewaretank



5
votes

Bien que vous ne fournissez pas votre code HTML dans votre exemple, il est prudent de supposer que vous utilisez un ? Si tel est le cas, ajoutez votre étiquette de modèle de jeton CSRF à votre formulaire et appelez . Sérialize () sur votre formulaire.


0 commentaires

8
votes

Je renvoie habituellement un fichier avec ce contenu à chaque page que je souhaite pouvoir faire des demandes AJAX:

if (!$)
    var $ = django.jQuery;

$('html').ajaxSend(function(event, xhr, settings) {
    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 = $.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;
    }
    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
        // Only send the token to relative URLs i.e. locally.
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    }
});


0 commentaires