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程序性能的工具的教程
Apr 01 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
Python饼状图的绘制实例
Jan 15 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
python3的pip路径在哪
Jun 23 Python
通过实例了解python__slots__使用方法
Sep 14 Python
Python实现手势识别
Oct 21 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
python 如何用terminal输入参数
May 25 Python
virtualenv隔离Python环境的问题解析
Jun 21 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程序实现支持页面后退的两种方法
2008/06/30 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
详谈PHP编码转换问题
2015/07/28 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
Python数据可视化库seaborn的使用总结
2019/01/15 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
django的model操作汇整详解
2019/07/26 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
作风建设整改方案
2014/10/27 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
学校运动会加油词
2015/07/18 职场文书
趣味运动会简讯
2015/07/20 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
python 管理系统实现mysql交互的示例代码
2021/12/06 Python