2009-03-07 18 views
20

So, ich fange gerade an, jQuery mit einem meiner Django-Projekte zu verwenden, aber ich habe eine hübsche noobie Frage.Django + Ajax

In einer Django-Ansicht müssen Sie ein HttpResponse-Objekt aus der Ansicht zurückgeben, aber manchmal muss ich nichts zurückgeben. Zum Beispiel könnte ich die Datenbank nur über Ajax aktualisieren und muss nichts zurücksenden. Meine Frage ist also, was machst du in dieser Situation?

Dank

Antwort

37

Eine HTTP-Antwort ist mehr als das Senden von Inhalten an den Browser. Eine Antwort ist mit einem Statuscode und mehreren HTTP-Headern verknüpft. Darüber hinaus kann eine Antwort einen Text (tatsächlichen Inhalt) enthalten.

Ich denke, es ist in Ordnung, ein HttpResponse-Objekt ohne Körper zu senden. Das heißt:

return HttpResponse() 

Dies wird eine HTTP-Antwort mit dem Statuscode 200 OK senden, das ist genau das, was auf der Serverseite passiert ist, das heißt der Vorgang erfolgreich war, alles in Ordnung ist. Obwohl es bessere Möglichkeiten gibt, siehe unten.

Restfully Sprechen Sie, wenn der Vorgang auf Probleme stieß, sollten Sie eine HTTP-Antwort mit einem entsprechenden status code zurückgeben. Wie einer der 5XX-Statuscodes, die serverseitige Fehler kennzeichnen.

Nun sehen wir uns all diese HTTP-Statuscodes an und sehen einen 201 Erstellt Statuscode, der ein geeigneterer Code als 200 OK ist, wenn Sie diese POST-Daten irgendwo speichern, wie eine DB. In diesem Fall sollten Sie so etwas wie dies Ihrer Meinung nach tun:

return HttpResponse(status=201) 

Und, wie jemand bereits erwähnt, können Sie die Vorteile dieses Statuscodes in Ihrem JavaScript nehmen könnten, so dass Sie einen Benutzer eine informative Nachricht präsentieren oder wählen Sie eine andere Strategie für Ihre Anfragen.

0

Ich würde einen leeren String zurück:

return HttpResponse("") 
5

Sie noch ein Httpresponse zu lassen jQuery wissen zurückkehren wollen, ob die Antwort ein Erfolg oder Misserfolg war. Die meisten JavaScript-Bibliotheken, die jQuery enthalten, suchen nach einer 200-OK-Antwort. Ganz zu schweigen davon, dass es nützlich sein könnte, ein JSON-Objekt zurückzugeben, bei dem die Anzahl der betroffenen Zeilen oder die Tally einer Abstimmung betroffen sind.

0

Danke für die Antworten. Das Beispiel, an dem ich gerade arbeite, ist eine ToDo-Liste, in der der Benutzer Elemente an eine neue Position ziehen kann. Ich verwende jQuery, um Postdaten an die Ansicht zu senden, die die neue Bestellung in der Datenbank speichert. In diesem Beispiel möchte ich dem Benutzer keine Antwort anzeigen, nachdem er die Liste neu sortiert hat, da dies lästig und nicht unbedingt notwendig wäre. Ich werde irgendwelche Fehler auffangen, wenn sie auftreten und dem Benutzer eine passende Antwort zeigen, wenn das geschieht.

Also eine Verwendung von return HttpResponse(status=201) ist eine gute Idee in diesem Szenario?

+0

Ich glaube, 201 bedeutet, dass Sie etwas geschaffen, und dann könnte man einen 200 zurück, wenn Sie nur um etwas bewegen. –

0

Entschuldigung, kann noch nicht kommentieren.

HTTP-Statuscodes sind eine großartige Möglichkeit, zusätzliche Informationen hinzuzufügen (wie in REST gezeigt).Sehen Sie hier für diejenigen, die nicht mehr als 200 sind, 404 oder 500:

RFC2616

Cheers,