Django 返回json数据的实现示例
在一个网站,大量数据的前后端交互,JSON是最好的传递数据方式了。
在Django中,使用JSON传输数据,有两种方式,一种是使用Python的JSON包,一种是使用Django的JsonResponse
方法一:使用Python的JSON包
fromdjango.shortcutsimportHttpResponse importjson deftestjson(request): data={ 'patient_name':'张三', 'age':'25', 'patient_id':'19000347', '诊断':'上呼吸道感染', } returnHttpResponse(json.dumps(data))
我们暂且把data看成是从数据库取出来的数据,使用浏览器访问一下testjson
这不是乱码,这是中文在内存中的二进制表现形式而已,使用JSON的转换工具可以看到中文。
我们看一下ResponseHeaders响应头,其中的Content-Type是text/html,我明明传的是JSON啊,怎么会变成字符串类型了?这是因为我们没有告诉浏览器,我们要传一个JSON数据,那么,怎么告诉浏览器呢?
deftestjson(request): data={ 'patient_name':'张三', 'age':'25', 'patient_id':'19000347', '诊断':'上呼吸道感染', } returnHttpResponse(json.dumps(data),content_type='application/json')
再访问网页:
方法二:使用JsonResponse进行传输
deftestjson(request): data={ 'patient_name':'张三', 'age':'25', 'patient_id':'19000347', '诊断':'上呼吸道感染', } returnJsonResponse(data)
访问网页:
JsonResponse的源码
classJsonResponse(HttpResponse): """ AnHTTPresponseclassthatconsumesdatatobeserializedtoJSON. :paramdata:Datatobedumpedintojson.Bydefaultonly``dict``objects areallowedtobepassedduetoasecurityflawbeforeEcmaScript5.See the``safe``parameterformoreinformation. :paramencoder:Shouldbeajsonencoderclass.Defaultsto ``django.core.serializers.json.DjangoJSONEncoder``. :paramsafe:Controlsifonly``dict``objectsmaybeserialized.Defaults to``True``. :paramjson_dumps_params:Adictionaryofkwargspassedtojson.dumps(). """ def__init__(self,data,encoder=DjangoJSONEncoder,safe=True, json_dumps_params=None,**kwargs): ifsafeandnotisinstance(data,dict): raiseTypeError( 'Inordertoallownon-dictobjectstobeserializedsetthe' 'safeparametertoFalse.' ) ifjson_dumps_paramsisNone: 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
deftestjson(request): listdata=["张三","25","19000347","上呼吸道感染"] returnJsonResponse(listdata)
程序报错了
deftestjson(request): listdata=["张三","25","19000347","上呼吸道感染"] returnJsonResponse(listdata,safe=False)
这有什么用
有时我们从数据库取出来的数据,很多是列表类型的,特别是用cx_Oracle包在Oracle数据库取出来的数据,其不支持直接字典的输出,输出就是一个list,这时我们使用JsonResponse(data,safe=False)就可以直接输换为Json,发送到前端了。
到此这篇关于Django返回json数据的实现示例的文章就介绍到这了,更多相关Django返回json内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。