zoukankan      html  css  js  c++  java
  • Django中的HttpResponse和JsonResponse

    Django中的HttpResponse和JsonResponse

    我们在编写一些借口函数的时候,经常需要给调用者返回json格式的数据,那么如何返回可直接解析的数据呢?

    首先第一种方式:

    from django.shortcuts import render
    from django.http import HttpResponse,JsonResponse
    import json
    
    # Create your views here.
    
    def index(request):
        data={
            'name':'zhangsan',
            'age':18,
        }
        return HttpResponse(json.dumps(data))
    

    这里前台的返回信息中,返回的Content-Type:是text/html,也就是字符串类型的返回,所以这段返回值并不是一个标准的json数据,是一个长得像json数据的字符串,当然可以通过工具直接转换为json,不过既然是一个json的接口,那么我们抛出的数据自然是json格式的最好,那如何抛出标准json格式的数据呢?

    稍稍修改一丢丢代码,在HttpResponse中添加content_type类型为json的属性

    from django.shortcuts import render
    from django.http import HttpResponse,JsonResponse
    import json
    
    # Create your views here.
    
    def index(request):
        data={
            'name':'zhangsan',
            'age':18,
        }
        return HttpResponse(json.dumps(data),content_type="application/json")
    

    现在返回的就是application/json了;

    那么Django提供了更方便的方法那就是JsonResponse,它内置帮我们封装了这个转换的操作,也就是说我们的接口抛json数据的话那么将HttpResponse替换为JsonResponse就OK了

    1. 首先先传dict数据:
    from django.shortcuts import render
    from django.http import HttpResponse,JsonResponse
    
    # Create your views here.
    
    def index(request):
        data={
            'name':'zhangsan',
            'age':18,
        }
        return JsonResponse(data)
    

    成功收到json数据;

    1. 接着再试试list数据
    from django.shortcuts import render
    from django.http import HttpResponse,JsonResponse
    
    # Create your views here.
    
    def index(request):
    
        listdata=[1,2,3,4,5]
        return JsonResponse(listdata)
    

    此时查看输出,却报错了``In order to allow non-dict objects to be serialized set the safe parameter to False.`

    所以我们如果需要将非dict类型的数据进行JsonResponse传值,需要将safe参数设置为False

    from django.shortcuts import render
    from django.http import HttpResponse,JsonResponse
    
    # Create your views here.
    
    def index(request):
    
        listdata=[1,2,3,4,5]
        return JsonResponse(listdata,safe=False)
    

    此时成功接收到数据。

    1. 如果我们需要使用JsonResponse传中文
    def func(request):
        data={'姓名':'释明空'}
        return JsonResponse(data,json_dumps_params={'ensure_ascii':False})
    
    

    此时需要添加'json_dumps_params={'ensure_ascii':False}',因为json序列化中文用的是ascii编码,所以传到前台的中文是ascii字符码,需要这一步转化为中文。

  • 相关阅读:
    CRC校验码原理、实例、手动计算
    RAID级别
    ffmbc——广播电视以及专业用途量身定制的FFmpeg
    Linux查看物理CPU个数、核数、逻辑CPU个数
    Linux服务器高并发实践经历
    Linux解压命令大全
    针对文件系统和网络性能的测试
    代码覆盖工具(gcov、lcov)的使用
    MYSQL的卸载
    Moosefs源代码分析
  • 原文地址:https://www.cnblogs.com/zhoajiahao/p/11466560.html
Copyright © 2011-2022 走看看