Comment écrire un Django vue pour une requête POST
J'ai écrit un tout petit exemple: un junit bouton qui envoie une requête POST avec une paire de valeurs:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>jQuery UI Button - Default functionality</title>
<script src="{{STATIC_URL}}js/jquery-1.9.1.js"></script>
<script src="{{STATIC_URL}}js/jquery-ui-1.10.3.custom.js"></script>
<link rel="stylesheet" href="{{STATIC_URL}}css/jquery-ui-1.10.3.custom.css">
<script>
$(function() {
$( "button" )
.button()
.click(function( event ) {
var postdata = {
'value1': 7,
'value2': 5
};
$.post('', postdata); // POST request to the same view I am now
window.alert("Hello world!"); // To know it is working
});
});
</script>
</head>
<body>
<button>Submit</button>
</body>
</html>
Ainsi, la vue est rendue lorsqu'une demande est envoyée à localhost:8000/bouton/, et lorsque le bouton est enfoncé une requête POST est également envoyé à localhost:8000/bouton/.
urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^button/$', 'helloworld.views.buttonExample'),
)
views.py
def buttonExample(request):
print 'RECEIVED REQUEST: ' + request.method
if request.method == 'POST':
print 'Hello'
else: #GET
return render(request, 'buttonExample.html')
Lorsque la demande est faite, la vue s'affiche correctement et je peux aussi lire à Django console les lignes:
RECEIVED REQUEST: GET <---- This line is because of my print
[28/May/2013 05:20:30] "GET /button/HTTP/1.1" 200 140898
[28/May/2013 05:20:30] "GET /static/js/jquery-1.9.1.js HTTP/1.1" 304 0
[28/May/2013 05:20:30] "GET /static/js/jquery-ui-1.10.3.custom.js HTTP/1.1" 304 0
[28/May/2013 05:20:30] "GET /static/css/jquery-ui-1.10.3.custom.css HTTP/1.1" 304 0
...
Et lorsque le bouton est enfoncé, je peux voir:
[28/May/2013 05:20:34] "POST /register/HTTP/1.1" 403 142238
Mais "REÇU de la DEMANDE: POST" n'est jamais imprimé. Il n'est ni "Bonjour". Il semble que l'urls.py n'est pas de servir la vue quand un POST est arrivé, parce que dans Firebug je vois que le POST statut 403 FORBIDDEN.
C'est probablement une stupide erreur de débutant, mais je ne sais pas ce qui me manque. J'ai lu le django chapitre de livre sur les avancées URLConf et Vues, et il semble que ça devrait fonctionner, il suffit de cocher la demande.méthode de la valeur.
OriginalL'auteur Roman Rdgz | 2013-05-28
Vous devez vous connecter pour publier un commentaire.
C'est par la conception. Votre message données doit contenir
csrfmiddlewaretoken
valeur. Vous pouvez l'obtenir à partir de vos cookies et ensuite l'envoyer avec les requêtes POST. Les détails ici. Pour votre cas particulier, vous pouvez le faire -Mise à jour de réponse. de vérifier.
BTW, à l'aide de
$.cookie
nécessite jQuery cookie plugin.OriginalL'auteur Bibhas Debnath
Vous recevez un 403 en raison de la protection CSRF - vous n'avez pas fourni un jeton pour vous protéger contre les attaques. La documentation vous dit tout ce que vous devez savoir.
OriginalL'auteur Daniel Roseman