Django 返回json数据的实现示例


Posted in Python onMarch 05, 2020

在一个网站,大量数据的前后端交互,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,发送到前端了。

到此这篇关于Django 返回json数据的实现示例的文章就介绍到这了,更多相关Django返回json 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python抓取京东商城手机列表url实例代码
Dec 18 Python
python抓取豆瓣图片并自动保存示例学习
Jan 10 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
使用Python来编写HTTP服务器的超级指南
Feb 18 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
DataFrame中的object转换成float的方法
Apr 10 Python
Django model反向关联名称的方法
Dec 15 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 #Python
python画图常规设置方式
Mar 05 #Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 #Python
python入门之井字棋小游戏
Mar 05 #Python
解决Python图形界面中设置尺寸的问题
Mar 05 #Python
python实现简单井字棋小游戏
Mar 05 #Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 #Python
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
Python深入学习之闭包
2014/08/31 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python贪吃蛇游戏代码
2020/04/18 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python创造虚拟环境方法总结
2019/03/04 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python用input输入列表的实例代码
2020/02/07 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
护士自我鉴定
2013/10/23 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
党员创先争优活动总结
2014/05/04 职场文书
社团活动总结书
2014/06/27 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL