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 学习笔记
Dec 27 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
浅谈利用numpy对矩阵进行归一化处理的方法
Jul 11 Python
python使用matplotlib绘制热图
Nov 07 Python
自定义django admin model表单提交的例子
Aug 23 Python
python能做什么 python的含义
Oct 12 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
python第三方库学习笔记
Feb 07 Python
Django choices下拉列表绑定实例
Mar 13 Python
python中uuid模块实例浅析
Dec 29 Python
python自然语言处理之字典树知识总结
Apr 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
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
一段实时更新的时间代码
2006/07/07 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
Python OpenCV获取视频的方法
2018/02/28 Python
Python实现的端口扫描功能示例
2018/04/08 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
车辆工程专业求职信
2014/06/14 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
公务员考察材料范文
2014/12/23 职场文书
法务专员岗位职责
2015/02/14 职场文书
《检阅》教学反思
2016/02/22 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers