Django中使⽤Json返回数据的实现⽅法
在⼀个⽹站在,⼤量数据与前端交互,JSON是最好的传递数据⽅式了。
在Django中,使⽤JSON传输数据,有两种⽅式,⼀种是使⽤Python的JSON包,⼀种是使⽤Django的JsonRespon20个好句子
⽅法⼀:使⽤Python的JSON包
from django.shortcuts import HttpRespon
import json
def testjson(request):
data={
'patient_name': '张三',
'age': '25',
'patient_id': '19000347',
'诊断': '上呼吸道感染',
}
return HttpRespon(json.dumps(data))
我们暂且把data看成是从数据库取出来的数据,使⽤浏览器访问⼀下testjson
咦,怎么是乱码了?有中⽂的都是乱码了?
不着急,这不是乱码,这是中⽂在内存中的⼆进制表现形式⽽已,使⽤JSON的转换⼯具可以看到中⽂的。
我们看⼀下Respon Headers响应头,其中的Content-Type是text/html,我明明传的是JSON啊,怎么会变成字符串类型了?这是因为我们没有告诉浏览器,我们要传⼀个JSON数据,那么,怎么告诉浏览器呢?
HttpRespon是继承HttpResponBa的,我们可以告诉浏览器,我要传application/json数据。我们稍微改⼀下content的值,看看会变成什么?
def testjson(request):
data={
'patient_name': '张三',
'age': '25',
委托书范本个人委托个人'patient_id': '19000347',
'诊断': '上呼吸道感染',生姜红糖茶
}
return HttpRespon(json.dumps(data), content_type='application/json')
再访问⽹页:
晚上钓鱼这下好了,是传输JSON了,在Preview中可以正常显⽰出来了。⽅法⼆:使⽤JsonRespon进⾏传
输。
def testjson(request):
data={
'patient_name': '张三',
'age': '25',
'patient_id': '19000347',
'诊断': '上呼吸道感染',
散文短篇}
return JsonRespon(data)
访问⽹页:
嗯,⼀切正常。
看⼀下JsonRespon的源码:
class JsonRespon(HttpRespon):
"""
An HTTP respon class that consumes data to be rialized to JSON.
:param data: Data to be dumped into json. By default only ``dict`` objects
are allowed to be pasd due to a curity flaw before EcmaScript 5. See the ``safe`` parameter for more information.
:param encoder: Should be a json encoder class. Defaults to
``ializers.json.DjangoJSONEncoder``.
红参片的功效与作用及食用方法绝密文件:param safe: Controls if only ``dict`` objects may be rialized. Defaults
to ``True``.
:param json_dumps_params: A dictionary of kwargs pasd to json.dumps(). """
def __init__(lf, data, encoder=DjangoJSONEncoder, safe=True,
json_dumps_params=None, **kwargs):
if safe and not isinstance(data, dict):
rai TypeError(
'In order to allow non-dict objects to be rialized t the '
'safe parameter to Fal.'
)
if json_dumps_params is None:
json_dumps_params = {}
kwargs.tdefault('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 JsonRespon(listdata)
程序报错了
报错为:In order to allow non-dict objects to be rialized t the safe parameter to Fal,它的意思是转换为⼀个⾮字典的类型时,safe参数要设置为Fal,还记得上⾯JsonRespon的原码吗?其中就有
代码修改为:
def testjson(request):
listdata = ["张三", "25", "19000347", "上呼吸道感染"]
return JsonRespon(listdata, safe=Fal)
嗯,这下正常了。
这有什么⽤呢?有时我们从数据库取出来的数据,很多是列表类型的,特别是⽤cx_Oracle包在Oracle数据库取出来的数据,其不⽀持直接字典的输出,输出就是⼀个list,这时我们使⽤JsonRespon(data, safe=Fal)就可以直接输换为Json,发送到前端了。
到此这篇关于Django中使⽤Json返回数据的实现⽅法的⽂章就介绍到这了,更多相关Django Json返回数据内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!