zoukankan      html  css  js  c++  java
  • JsonResponse

    1.JsonResponse

    class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)

    是HttpResponse的一个子类(有很多的子类),用于帮助创建JSON编码的响应。他从父类继承大部分行为,并具有以下的不同点:

      它的默认Content-Type头部设置为application/json。

    (1)它的第一个参数 data,应该为一个 dict 实例。如果 safe 参数设置为 False,它可以是任何可 JSON 序列化的对象。

    (2)encoder,默认为 django.core.serializers.json.DjangoJSONEncoder,用于序列化data。

    (3)布尔参数 safe 默认为 True。如果设置为 False,可以传递任何对象进行序列化(否则,只允许 dict 实例)。如果 safe 为 True,而第一个参数传递的不是 dict 对象,将抛出一个TypeError。

    (4)json_dumps_params 是一个字典,它是在生成响应时,传给 json.dumps() 的参数。

    2.用法

    from django.http import JsonResponse  
     response = JsonResponse({'foo': 'bar'})  
     response.content  
    '{"foo": "bar"}'      //<span style=" font-family: Helvetica, Tahoma, Arial, sans-serif;">序列化非字典对象</span>

    若要序列化非 dict 对象,你必须设置 safe 参数为 False:

    response = JsonResponse([1, 2, 3], safe=False)  
    如果不传递safe=False,将抛出一个TypeError。 

    3.修改默认的JSON 编码器

     如果你需要使用不同的 JSON 编码器类,你可以传递 encoder 参数给构造函数:

    response = JsonResponse(data, encoder=MyJSONEncoder)  

    JsonResponse(book_list,safe=False,json_dumps_params={"ensure_ascii":False})

    可以解决编码问题,得到想输出的中文了

    HTTPResponse JsonReponse Response区别

    1.HTTPResponse是由Django创建的,他的返回格式为HTTPResponse(content=响应体, content_type=响应体数据类型, status=状态码),可以修改返回的数据类型,适用于返回图片,视频,音频等二进制文件

    2.JsonReponse是HTTPResponse的子类,适用于处理json格式的数据,但是不能返回模板。

    帮助我们将数据转换为json字符串

    设置响应头Content-Type为application/json

    3.Response是Django-rest Framework框架中封装好的响应对象,他的返回格式为Response(data, status=None, template_name=None, headers=None, content_type=None),

    data只需传递python的内建类型数据即可,如果是Django的模型类对象,那么就使用序列化将数据(python的字典数据)传递给data。

  • 相关阅读:
    php生成随机颜色代码
    终于完成了 源码 编译lnmp环境
    json_encode 中文 null
    push is not a function
    linux 搭建svn 服务器
    samba 挂载windows共享文件夹
    php 加密 解密 方法
    serialize unserialize
    CentOS Linux解决Device eth0 does not seem to be present 但是没有发现eth1
    javascript 获取视口的高度和宽度
  • 原文地址:https://www.cnblogs.com/jinan1/p/10689842.html
Copyright © 2011-2022 走看看