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中的localtime()方法使用详解
May 22 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
python挖矿算力测试程序详解
Jul 03 Python
在django-xadmin中APScheduler的启动初始化实例
Nov 15 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
pygame实现弹球游戏
Apr 14 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
Python爬虫之Selenium库的使用方法
Jan 03 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 Python
Django实现在线无水印抖音视频下载(附源码及地址)
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处理json格式数据经典案例总结
2016/05/19 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
jquery创建div 实现代码
2009/04/27 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python 内置函数complex详解
2016/10/23 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python使用sorted排序的方法小结
2017/07/28 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
企业党员一句话承诺
2014/05/30 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
客服专员岗位职责
2015/02/10 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
辅导员学期工作总结
2015/08/14 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2016年少先队活动总结
2016/04/06 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python