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 相关文章推荐
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 Python
基于python3实现socket文件传输和校验
Jul 28 Python
在Python dataframe中出生日期转化为年龄的实现方法
Oct 20 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
django query模块
Apr 20 Python
python程序控制NAO机器人行走
Apr 29 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
python安装scipy的方法步骤
Jun 26 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python实现高斯投影正反算方式
Jan 17 Python
python数据类型强制转换实例详解
Jun 22 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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
AM/FM收音机的安装与调试
2021/03/02 无线电
php 在线打包_支持子目录
2008/06/28 PHP
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
php微信开发之谷歌测距
2018/06/14 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
食品采购员岗位职责
2014/04/14 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
期末考试复习计划
2015/01/19 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
Python实现为PDF去除水印的示例代码
2022/04/03 Python
我去timi了,一起去timi是什么意思?
2022/04/13 杂记