2009-03-07 21 views
20

Quindi, sto appena iniziando a utilizzare jQuery con uno dei miei progetti Django, ma ho una bella domanda di noobie.Django + Ajax

In una vista di django è necessario restituire un oggetto HttpResponse dalla vista, ma a volte non è necessario restituire nulla. Ad esempio, potrei semplicemente aggiornare il database tramite ajax e non è necessario inviare nulla indietro. Quindi la mia domanda è: cosa fai in quella situazione?

Grazie

risposta

37

Una risposta HTTP è più che l'invio di contenuto al browser. Una risposta è associata a un codice di stato ea diverse intestazioni HTTP. Inoltre, una risposta può contenere un corpo (contenuto effettivo).

Penso che sia corretto inviare un oggetto HttpResponse senza corpo. Cioè:

return HttpResponse() 

Questo invierà una risposta HTTP con codice di stato 200 OK, che è esattamente quello che è successo sul lato server, vale a dire l'operazione è riuscita, tutto è OK. Sebbene ci siano modi migliori, vedi sotto.

Restfully parlando, quando l'operazione ha riscontrato problemi, è necessario restituire una risposta HTTP con uno status code appropriato. Come uno dei codici di stato 5XX che designano errori lato server.

Ora, guardando tutti quei codici di stato HTTP vediamo un 201 stato di codice creato che è un codice più appropriato di 200 OK quando si memorizzano i dati POST da qualche parte, come un DB. In questo caso si dovrebbe fare qualcosa di simile a suo avviso:

return HttpResponse(status=201) 

E, come qualcuno già accennato, si potrebbe approfittare di questi codici di stato nel vostro JavaScript in modo da poter presentare un utente un messaggio più informativo o forse scegli qualche altra strategia per le tue richieste.

0

mi piacerebbe tornare una stringa vuota:

return HttpResponse("") 
5

hai ancora voglia di restituire un HttpResponse per far jQuery sapere se la risposta è stata un successo o il fallimento. La maggior parte delle librerie javascript che includono jQuery cercano una risposta di 200 ok. Per non parlare di ciò potrebbe essere utile restituire un oggetto JSON con il numero di righe interessate o il conteggio di un voto.

0

Grazie per le risposte. L'esempio al quale sto attualmente lavorando è un elenco di cose da fare, in cui l'utente può trascinare gli oggetti in una nuova posizione. Sto usando jQuery per inviare i dati del post alla vista, che salva il nuovo ordine nel database. Per questo esempio, non voglio mostrare una risposta all'utente dopo aver fatto ricorso all'elenco perché sarebbe fastidioso e non è realmente necessario. Prenderò eventuali errori se si verificano e mostrando all'utente una risposta appropriata se ciò accade.

Quindi utilizzare return HttpResponse(status=201) è una buona idea in questo scenario?

+0

Credo 201 significa che si è creato qualcosa, e allora si potrebbe restituire un 200 se si sposta qualcosa intorno. –

0

Siamo spiacenti, non è stato ancora commentato.

I codici di stato HTTP sono un ottimo modo per aggiungere ulteriori informazioni (come dimostrato da REST).Vedi qui per quelli che non sono 200, 404 o 500:

RFC2616

Cheers,