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基础教程之python消息摘要算法使用示例
Feb 10 Python
python实现SOM算法
Feb 23 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
flask框架蓝图和子域名配置详解
Jan 25 Python
python线程join方法原理解析
Feb 11 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
Python join()函数原理及使用方法
Nov 14 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
解决jupyter notebook启动后没有token的坑
Apr 24 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 开源AJAX框架14种
2009/08/24 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
常用的js验证和数据处理总结
2016/08/02 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
个人找工作求职简历的自我评价
2013/10/20 职场文书
大学生职业生涯设计书
2014/01/02 职场文书
自我鉴定怎么写
2014/01/12 职场文书
小学生校园广播稿
2014/09/28 职场文书
个人总结怎么写
2015/02/26 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL