Django 之 JsonResponse 对象

Posted midworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 之 JsonResponse 对象相关的知识,希望对你有一定的参考价值。

JsonResponse 是 HttpResponse 的子类,与父类的区别在于:

  • JsonResponse 默认 Content-Type 类型为 application/json
  • HttpResponse 默认为 application/text
class JsonResponse(HttpResponse):

    def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
                    json_dumps_params=None, **kwargs):

HttpResponse

HttpResponse 每次将数据返回给前端需要用 json 模块序列化,且前端也要反序列化:

# views.py

import json

def index(request):
    message = '请求成功'
    # ret = 'message': '请求成功'
    return HttpResponse(json.dumps(message))    # 序列化


# index.html
$.ajax(
    url: '/accounts/ajax/',
    type: 'post',
    data: 
        'p': 123,
        csrfmiddlewaretoken: ' csrf_token '
    ,
    # 反序列化,或使用 json.parse(arg)
    dataType: "JSON",      
    success: function (arg) 
        console.log(arg.message);
    
)

JsonResponse

JsonResponse 只能序列化字典格式,不能序列化字符串,且前端不用反序列化:

from django.http import JsonResponse

def index(request):

    ret = 'message': '请求成功'
    return JsonResponse(ret)    # 序列化


# index.html
$.ajax(
    url: '/accounts/ajax/',
    type: 'post',
    data: 
        'p': 123,
        csrfmiddlewaretoken: ' csrf_token '
    ,
    # 不需要反序列化
    # dataType: "JSON",      
    success: function (arg) 
        console.log(arg.message);       # 请求成功
    
)

总结

  • HTTPResponse 后端要用 json 模块序列化,前端也要反序列化。
  • JSonResponse 前端不用反序列化,只能传输字典,不能传输字符串。

以上是关于Django 之 JsonResponse 对象的主要内容,如果未能解决你的问题,请参考以下文章

django之HTTPResponse和JsonResponse详解

Django 之 JsonResponse使用方法

JsonResponse | Django开发

Django HttpResponse与JsonResponse对象

Django框架 之 view视图

django之视图层