2009-03-07 7 views
20

Donc, je commence juste à utiliser jQuery avec l'un de mes projets Django, mais j'ai une question plutôt noobie.Django + Ajax

Dans une vue django, vous devez renvoyer un objet HttpResponse depuis la vue, mais parfois je n'ai pas besoin de retourner quoi que ce soit. Par exemple, je pourrais juste mettre à jour la base de données par l'intermédiaire d'ajax et ne pas devoir renvoyer n'importe quoi en arrière. Alors ma question est, que faites-vous dans cette situation?

Merci

Répondre

37

Une réponse HTTP est plus que l'envoi de contenu au navigateur. Une réponse est associée à un code d'état et plusieurs en-têtes HTTP. De plus, une réponse peut contenir un corps (contenu réel).

Je pense que c'est OK pour envoyer un objet HttpResponse sans corps. C'est:

return HttpResponse() 

Cela envoie une réponse HTTP avec le code d'état 200 OK, ce qui est exactement ce qui est arrivé sur le côté serveur, à savoir l'opération a réussi, tout est OK. Bien qu'il existe de meilleurs moyens, voir ci-dessous. Par exemple, lorsque l'opération a rencontré des problèmes, vous devez retourner une réponse HTTP avec un status code approprié. Comme l'un des codes d'état 5XX qui désignent les erreurs côté serveur. Maintenant, en regardant tous ces codes d'état HTTP, nous voyons un code d'état 201 Created qui est un code plus approprié que 200 OK lorsque vous stockez ces données POST quelque part, comme une base de données. Dans ce cas, vous devriez faire quelque chose comme ceci dans votre vue:

return HttpResponse(status=201) 

Et, comme quelqu'un l'a déjà mentionné, vous pouvez profiter de ces codes d'état dans votre JavaScript afin que vous puissiez présenter un utilisateur un message plus informatif ou peut-être choisir une autre stratégie pour vos demandes.

0

Je retourne une chaîne vide:

return HttpResponse("") 
5

Vous voulez toujours retourner un HttpResponse pour laisser savoir si jQuery la réponse a été un succès ou un échec. La plupart des bibliothèques javascript incluant jQuery recherchent une réponse de 200 ok. Sans oublier qu'il peut être utile de renvoyer un objet JSON avec le nombre de lignes affectées ou le décompte d'un vote.

0

Merci pour les réponses. L'exemple sur lequel je travaille actuellement est une liste de tâches, dans laquelle l'utilisateur peut faire glisser des éléments vers une nouvelle position. J'utilise jQuery pour envoyer des données de publication à la vue, ce qui enregistre la nouvelle commande dans la base de données. Pour cet exemple, je ne veux pas montrer une réponse à l'utilisateur après avoir recouru à la liste car cela deviendrait ennuyeux et ce n'est pas vraiment nécessaire. J'attraperai toutes les erreurs si elles se produisent et montrer à l'utilisateur une réponse appropriée si cela se produit.

L'utilisation de return HttpResponse(status=201) est-elle une bonne idée dans ce scénario?

+0

Je crois 201 signifie que vous avez créé quelque chose, et vous pouvez retourner un 200 si vous venez de passer quelque chose autour. –

0

Désolé, nous ne pouvons pas encore de commentaire.

Les codes d'état HTTP sont un excellent moyen d'ajouter des informations supplémentaires (comme démontré par REST).Voir ici pour ceux qui ne sont pas 200, 404 ou 500:

RFC2616

Cheers,