网络编程
位置:首页>> 网络编程>> Python编程>> Django 返回json数据的实现示例

Django 返回json数据的实现示例

作者:从青从争喽  发布时间:2021-03-06 21:33:17 

标签:Django,返回,json

在一个网站,大量数据的前后端交互,JSON是最好的传递数据方式了。
在Django中,使用JSON传输数据,有两种方式,一种是使用Python的JSON包,一种是使用Django的JsonResponse

方法一:使用Python的JSON包


from django.shortcuts import HttpResponse
import json

def testjson(request):
data={
 'patient_name': '张三',
 'age': '25',
 'patient_id': '19000347',
 '诊断': '上呼吸道感染',
}
return HttpResponse(json.dumps(data))

我们暂且把data看成是从数据库取出来的数据,使用浏览器访问一下testjson

Django 返回json数据的实现示例

这不是乱码,这是中文在内存中的二进制表现形式而已,使用JSON的转换工具可以看到中文。

我们看一下Response Headers响应头,其中的Content-Typetext/html,我明明传的是JSON啊,怎么会变成字符串类型了?这是因为我们没有告诉浏览器,我们要传一个JSON数据,那么,怎么告诉浏览器呢?


def testjson(request):
data={
 'patient_name': '张三',
 'age': '25',
 'patient_id': '19000347',
 '诊断': '上呼吸道感染',
}
return HttpResponse(json.dumps(data), content_type='application/json')

再访问网页:

Django 返回json数据的实现示例

Django 返回json数据的实现示例

现在是传输JSON了,在Preview中可以正常显示出来。

方法二:使用JsonResponse进行传输


def testjson(request):
data={
 'patient_name': '张三',
 'age': '25',
 'patient_id': '19000347',
 '诊断': '上呼吸道感染',
}
return JsonResponse(data)

访问网页:

Django 返回json数据的实现示例

Django 返回json数据的实现示例

Django 返回json数据的实现示例

JsonResponse的源码


class JsonResponse(HttpResponse):
 """
 An HTTP response class that consumes data to be serialized to JSON.

:param data: Data to be dumped into json. By default only ``dict`` objects
  are allowed to be passed due to a security flaw before EcmaScript 5. See
  the ``safe`` parameter for more information.
 :param encoder: Should be a json encoder class. Defaults to
  ``django.core.serializers.json.DjangoJSONEncoder``.
 :param safe: Controls if only ``dict`` objects may be serialized. Defaults
  to ``True``.
 :param json_dumps_params: A dictionary of kwargs passed to json.dumps().
 """

def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
        json_dumps_params=None, **kwargs):
   if safe and not isinstance(data, dict):
     raise TypeError(
       'In order to allow non-dict objects to be serialized set the '
       'safe parameter to False.'
     )
   if json_dumps_params is None:
     json_dumps_params = {}
   kwargs.setdefault('content_type', 'application/json')
   data = json.dumps(data, cls=encoder, **json_dumps_params)
   super().__init__(content=data, **kwargs)

其内部也是通过json.dumps来把数据转换为JSON的,其还可以转换为list类型。我们再来改一下testjson


def testjson(request):
listdata = ["张三", "25", "19000347", "上呼吸道感染"]
return JsonResponse(listdata)

程序报错了

Django 返回json数据的实现示例

报错为:In order to allow non-dict objects to be serialized set the safe parameter to False,它的意思是转换为一个非字典的类型时,safe参数要设置为False,还记得上面JsonResponse的原码吗?其中就有

Django 返回json数据的实现示例

代码修改为:


def testjson(request):
 listdata = ["张三", "25", "19000347", "上呼吸道感染"]
 return JsonResponse(listdata, safe=False)

Django 返回json数据的实现示例

Django 返回json数据的实现示例

Django 返回json数据的实现示例

这有什么用

有时我们从数据库取出来的数据,很多是列表类型的,特别是用cx_Oracle包在Oracle数据库取出来的数据,其不支持直接字典的输出,输出就是一个list,这时我们使用JsonResponse(data, safe=False)就可以直接输换为Json,发送到前端了。

来源:https://blog.csdn.net/qq_38627475/article/details/104628662

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com