django中的JsonResponse和HttpResponse有什么区别

时间:2019-02-11 10:46:48

标签: python django

让我们说result = {'a': 1, 'b': 2, 'c': 3}

这两者之间有区别吗?

return HttpResponse(json.dumps(a))

return JsonResponse(a)

4 个答案:

答案 0 :(得分:2)

doc指出,主要区别是

  • 自动序列化
  • 适当的内容类型
  • 默认情况下更安全的输入检查

答案 1 :(得分:1)

Django使用请求和响应对象在系统中传递状态。每个视图负责返回HttpResponse对象。使用HttpResponse,您需要首先将对象序列化为JSON。

从1.7版开始,Django会使用内置的JsonResponse类,它是HttpResponse的子类。它的默认Content-Type标头设置为application / json,这确实很方便。它还带有JSON编码器,因此您无需在返回响应对象之前对数据进行序列化。

您还可以参考this文档:

答案 2 :(得分:0)

尝试一下,它将通过

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

但如果您这样做

return JsonResponse("abcd")

JsonResponse将为您提供TypeError,如果您发送不可序列化的数据(除非在JsonResponse中为safe=False

因此,在JsonResponse

中发送json数据更安全

并且在标头JsonResponse中将设置Content-Type: application/json,另一方面,HttpResponse中将设置Content-Type: text/html; charset=utf-8

答案 3 :(得分:0)

  • HTTPResponse

    • HTTPResponse(内容=响应主体,content_type=响应主体数据类型,状态=状态代码)
    • 适用于字符串、模板
    • class HttpResponse(HttpResponseBase):
  • JsonReponse

    • 它是 HTTPResponse 的子类,
      • 适合处理json格式的数据,但不能返回模板。
      • class JsonResponse(HttpResponse):

参考Django Doc