3
votes

Quelle est la différence entre JsonResponse et HttpResponse dans Django

Disons result = {'a': 1, 'b': 2, 'c': 3}

Y a-t-il une différence entre ces deux:

return JsonResponse(a)

et

return HttpResponse(json.dumps(a))


0 commentaires

3 Réponses :


7
votes

Comme doc , la principale différence est

  • sérialisation automatique
  • type de contenu approprié
  • vérification des entrées plus sûre par défaut

0 commentaires

2
votes

Django utilise des objets de requête et de réponse pour transmettre l'état à travers le système. Chaque vue est responsable du renvoi d'un objet HttpResponse. En utilisant HttpResponse, vous devez d'abord sérialiser votre objet en JSON.

Considérant que,

Depuis la version 1.7, Django compte avec la classe intégrée JsonResponse , qui est une sous-classe de HttpResponse . Son en-tête Content-Type par défaut est défini sur application / json, ce qui est vraiment pratique. Il est également livré avec un encodeur JSON, vous n'avez donc pas besoin de sérialiser les données avant de renvoyer l'objet de réponse.

Vous pouvez également consulter ce doc:


0 commentaires

1
votes

Essayez ceci, cela passera

return JsonResponse("abcd")

Mais si vous le faites

return HttpResponse(json.dumps("abcd"))

JsonResponse vous donnera TypeError si vous envoyez des données non sérialisables (Sauf safe = False dans JsonResponse)

Il est donc plus sûr d'envoyer des données json dans JsonResponse code>

Et dans l'en-tête JsonResponse définira Content-Type: application / json d'autre part, HttpResponse définira Content-Type: texte / html; jeu de caractères = utf-8


0 commentaires