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用字典统计单词或汉字词个数示例
Apr 22 Python
python复制文件的方法实例详解
May 22 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
python time.strptime格式化实例详解
Feb 03 Python
python爬虫scrapy基本使用超详细教程
Feb 20 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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
中东人咖啡哲学
2021/03/03 咖啡文化
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Python实现的石头剪子布代码分享
2014/08/22 Python
Python中的random()方法的使用介绍
2015/05/15 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
Python之py2exe打包工具详解
2017/06/14 Python
python语言中with as的用法使用详解
2018/02/23 Python
python如何统计序列中元素
2020/07/31 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Django组件content-type使用方法详解
2019/07/19 Python
python issubclass 和 isinstance函数
2019/07/25 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
大四学生找工作的自荐信
2014/03/27 职场文书
小学生暑假家长评语
2014/04/17 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL