django响应体之JsonResponse类

JsonResponse类

  • JsonResponse是HttpResponse的扩展响应类,是对字典格式的数据进行的一个序列化,本质还是HttpResponse进行响应

利用HttpResponse来进行对字典数据进行响应

  • 如果对一个字典数据进行响应,但是httpresponse只能返回一个字符串格式的,所以需要把字典改变为一个字符串格式的才能进行响应到浏览器,需要引入json格式,把字典变为一个json格式的字符串,返回的最终还是一个字符串
    from django.shortcuts import render, HttpResponse
    import json
    
    def login(request):
        book = {"title": "三国演义", "price": 199}
        return HttpResponse(json.dumps(book))
    这时浏览器页面返回的是{"title": "\u4e09\u56fd\u6f14\u4e49", "price": 199},中文看不出来,则需要加入ensure_ascii=False
    from django.shortcuts import render, HttpResponse
    import json
    def login(request):
        book = {"title": "三国演义", "price": 199}
        return HttpResponse(json.dumps(book,ensure_ascii=False))
    这时浏览器页面返回的是:{"title": "三国演义", "price": 199},本质还是一个json格式的字符串
  • 如果需要对这个字典数据进行响应,响应会一个真正的json格式的数据,那么就需要给这个返回的数据类型定义一个格式,如下图:
    from django.shortcuts import render, HttpResponse
    import json
    def login(request):
        book = {"title": "三国演义", "price": 199}
        return HttpResponse(json.dumps(book,ensure_ascii=False),content_type="application/json")
    注:在对一个字典数据进行返回时,先对其进行变为一个json格式的字符串,然后再给这个字符串定义为json格式,这样返回的就是一个json格式的数据

用JsonResponse来对字典数据进行响应

  • 用JsonResponse对字典数据进行响应,其本质上就是先对字典数据变为一个json格式的字符串,然后把该字符串定义为一个json格式的数据,在进行返回
  • 利用JsonResponse符字符串数据进行响应,其实就是省略了以上步骤,我们自己不用进行一个序列化了,JsonResponse类给我们都做好了的,直接使用即可
    from django.shortcuts import render, HttpResponse
    from django.http import JsonResponse
    import json
    def login(request):
        book = {"title": "三国演义", "price": 199}
        # return HttpResponse(json.dumps(book,ensure_ascii=False),content_type="application/json")
        return JsonResponse(book)
    注:如图所示,下面的返回等同于上面的返回,只是JsonResponse省略了其他的步骤,在内部已经封装好了,直接使用
  • 默认情况下JsonResponse只能对字典进行dump,如果想要对一个非字典的数据按照json格式进行展示,如下示例:
    from django.http import JsonResponse
    def login(request):
        books = [{"title": "三国演义", "price": 199},{"title": "水浒传", "price": 99}]
        return JsonResponse(books,safe=False)

    注:利用JsonResponse对一个列表进行响应,需要给JsonResponse传递一个safe=False参数,但是这里还有一个问题,返回的中文为unicode编码,而不是显示为中文,这时需要传入json_dumps_params={"ensure_ascii":False}参数进行显示,如下:

    from django.http import JsonResponse
    
    def login(request):
        books = [{"title": "三国演义", "price": 199},{"title": "水浒传", "price": 99}]
        return JsonResponse(books,safe=False,json_dumps_params={"ensure_ascii":False})

     

posted @ 2022-12-05 23:31  A熙  阅读(401)  评论(0)    收藏  举报