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使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python求导数的方法
May 09 Python
python求解水仙花数的方法
May 11 Python
Python微信库:itchat的用法详解
Aug 14 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
python中的错误如何查看
Jul 08 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
python dir函数快速掌握用法技巧
Dec 09 Python
python神经网络Xception模型
May 06 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
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
Python实现在线音乐播放器
2017/03/03 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
英国名牌男装店:Standout
2021/02/17 全球购物
实习公司领导推荐函
2014/05/21 职场文书
应聘教师求职信
2014/07/19 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android