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 django集成cas验证系统
Jul 14 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
python获取代码运行时间的实例代码
Jun 11 Python
python实现点对点聊天程序
Jul 28 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
Python创建或生成列表的操作方法
Jun 19 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
php实现留言板功能
2017/03/05 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
2014年业务工作总结
2014/11/17 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书