Wie schreibe ich eine Django-Ansicht für eine POST-Anfrage

Ich habe ein sehr kleines Beispiel geschrieben: eine Junit-Taste, die eine POST-Anfrage mit einem Paar von Werten sendet:

<!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> 

So wird die Ansicht gerendert, wenn eine GET-Anforderung an localhost gesendet wird: 8000 / button /, und wenn die Schaltfläche gedrückt wird, wird auch eine POST-Anforderung an localhost gesendet: 8000 / button /.

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') 

Wenn die GET-Anfrage durchgeführt wird, wird die Ansicht korrekt angezeigt und ich kann auch bei Django-Konsole die Zeilen lesen:

 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 ... 

Und wenn der Knopf gedrückt wird, kann ich sehen:

 [28/May/2013 05:20:34] "POST /register/ HTTP/1.1" 403 142238 

Aber "RECEIVED REQUEST: POST" wird nie gedruckt. Weder ist "Hallo". Es scheint, wie die urls.py ist nicht dienen die Ansicht, wenn ein POST angekommen, weil in Firebug kann ich sehen, dass POST-Status ist 403 VERBOTEN.

Das ist wohl ein dummer Neulingfehler, aber ich weiß nicht was ich vermisse. Ich habe das Django-Buchkapitel über fortgeschrittene URLConf und Views gelesen, und es sieht so aus, als ob es nur durch die Prüfung request.method Wert funktionieren sollte.

2 Solutions collect form web for “Wie schreibe ich eine Django-Ansicht für eine POST-Anfrage”

Dies ist von Design. Ihre POST-Daten müssen csrfmiddlewaretoken Wert csrfmiddlewaretoken enthalten. Sie können es aus Ihren Cookies und dann senden Sie es mit POST-Anfragen. Details hier. Für deinen Fall kannst du das machen –

 <script> $(function () { 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'); $("button") .button() .click(function (event) { var postdata = { 'value1': 7, 'value2': 5, 'csrfmiddlewaretoken': csrftoken }; $.post('', postdata); // POST request to the same view I am now window.alert("Hello world!"); // To know it is working }); }); </script> 

Sie erhalten 403 wegen CSRF-Schutz – Sie haben kein Token angegeben. Die Dokumentation sagt Ihnen alles, was Sie wissen müssen.

  • Python senden Postdaten mit Mechanisieren
  • Python MultiPart POST Malformed
  • Python-Anfragen 'POST-Datei schlägt fehl, wenn man versucht, ein WordPress Theme zum Host hochzuladen
  • Globale Variablenverwendung mit web.py in Apache
  • Versuche, mein Django Model Formset zu speichern, bekomme ManagementForm Fehler?
  • Wie wird Python verwendet, um Webservices zu erstellen?
  • Python urllib2 oder Anfragen nach Methode [duplizieren]
  • Python einfach wsgi datei hochladen skript - was ist falsch
  • Senden Sie die Datei mit dem POST aus einem Python-Skript
  • Muss Schlüsselschlüssel auf eine Webseite senden (html5 Spiel)
  • Django class based view gibt leere Zeichenfolge zurück, wenn POST
  • Python ist die beste Programmiersprache der Welt.