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实现的异步代理爬虫及代理池
Mar 17 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
python 读取文件并替换字段的实例
Jul 12 Python
对Python中内置异常层次结构详解
Oct 18 Python
在Mac上删除自己安装的Python方法
Oct 29 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
Oct 29 Python
python scp 批量同步文件的实现方法
Jan 03 Python
Python数据可视化之画图
Jan 15 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
python自动识别文本编码格式代码
Dec 26 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Python pip安装第三方库实现过程解析
Jul 09 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数组的使用方法小结
2010/09/23 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
js window.onload 加载多个函数的方法
2009/11/02 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
基于python历史天气采集的分析
2019/02/14 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python语言元素知识点详解
2019/05/15 Python
python如何实现代码检查
2019/06/28 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
python3爬虫中异步协程的用法
2020/07/10 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
销售经理工作职责范文
2013/12/03 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python
Moment的feature导致线上bug解决分析
2022/09/23 Javascript