Django-jQuery-post Anfrage
$.ajax({
url:'/',
type: "POST",
data: {name: 'name', age: 'age'},
success:function(response){},
complete:function(){},
error:function (xhr, textStatus, thrownError){}
});
Und in views.py:
class SomeView(generic_views.TemplateView):
template_name = 'something.html'
def get(self, request, *args, **kwargs):
...something...
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
name = request.POST['name']
age = request.POST['age']
...something...
Und ich bekomme die Meldung: [05/Oct/2012 12:03:58] "POST /etwas/HTTP/1.1" 403 2294
Ich würde gerne senden Sie diese Daten(name und Alter) per jQuery, um diese post-Funktion in "SomeView". Dies ist die gleiche Ansicht wie die Vorlage geladen, nur die Art der Anfrage ist anders. Über get() das template geladen und auf die post, die post() Funktion aufgerufen werden soll. Ist es möglich? Ich habe andere Fragen und bekam diese Lösung. Sollte es zu arbeiten. Was mache ich falsch?
InformationsquelleAutor premik91 | 2012-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort auf Ihre Frage, was Sie falsch machen, ist: nicht viel!
Django gibt eine 403-Antwort (Verboten), wenn Sie einen eingehenden POST-Anforderung schlägt fehl, Csrf überprüft.
Sie können dies tun, durch die jQuery-ajaxSetup, code-Schnipsel zu finden sind hier
Dem Grund, dass dies funktioniert über eine GET-Anfrage ist einfach, dass GET-Anfragen werden nicht geprüft durch die csrf middleware.
Als es scheint, Sie bauen eine form, eine andere Sache zu prüfen ist, mit Klassen-basierte Formulare. Sie Griff get/post und auch die überprüfung der parameter für Sie. Sehr ordentlich. Besonders wenn Sie Formen zu Bearbeiten/erstellen/löschen Modell-Instanzen, in diesem Fall können Sie umarmen die macht der ModelForms und CreateViews. Sehr ordentlich.
Könnte es einige Zeit dauern, um den Dreh dieser generischen Klasse basierte Ansichten. Aber es ist sehr gelohnt.
500 ist einfach nur ein server Fehler. Dies kann durch die python-Fehler in Ihrem post-Methode.
Aber das sollte zeigen, da bin ich in den debug-Modus, sollte es nicht?
Es funktioniert. Aber nicht in einer Weise, die Sie sehen können. Die stacktrace-und andere django debugging-Informationen zurück, wie eine HttpResponse auf Ihre ajax-request. Melden Sie es, indem Sie die Antwort, um es in der jquery.ajax-Fehler-callback. Es könnte einfacher sein zu verwenden firebug/chrome Entwickler-tool zum anzeigen, was genau passiert ist. Diese tools geben Ihnen die genauen Parameter übergeben, um den service und die Antwort des Servers, welche die Django-debug-Informationen.
Ok. Thx a lot 🙂
InformationsquelleAutor A.J.Rouvoet
Musst du eine CSRF-Angriffe (cross-site request forgery) token in deinem ajax-Aufruf. Dies ist sehr gut hier dokumentiert: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
oder, wenn Sie möchten, verwenden Sie einen quick-fix, verwenden Sie die
@csrf_exempt
Dekorateur für Ihre Ansicht:Hinzufügen
@csrf_exempt
Dekorator für die Ansicht um die quick-fix funktioniert gut und faszinierende Tatsache.InformationsquelleAutor Hoff
Innerhalb einer Django-template können Sie diese...
Die Ausgabe so etwas wie dieses, um Ihre html-Seite einfügen...
Dann mit Hilfe von Javascript können Sie einfach finden, diese Eingabe und erhalten seinen Wert - so etwas wie dieses nicht jQuery Beispiel...
Schließlich fügen Sie die csrf_value, um Ihre jQuery AJAX post form data line wie so...
Hier ist eine funktionierende jsFiddle Konzept: https://jsfiddle.net/vdx1Lfpc/18/
InformationsquelleAutor JxAxMxIxN