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中运算符"=="和"is"的详解
Oct 08 Python
python中requests库session对象的妙用详解
Oct 30 Python
详解django的serializer序列化model几种方法
Oct 16 Python
Python操作json的方法实例分析
Dec 06 Python
python使用udp实现聊天器功能
Dec 10 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
基于python监控程序是否关闭
Jan 14 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
Python利器openpyxl之操作excel表格
Apr 17 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
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
jQuery 使用个人心得
2009/02/26 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
用Python进行TCP网络编程的教程
2015/04/29 Python
Python3读取zip文件信息的方法
2015/05/22 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
实例讲解使用SVG制作loading加载动画的方法
2016/04/05 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
草莓网官网:StrawberryNET
2019/08/21 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
开业庆典邀请函
2014/01/08 职场文书
八年级物理教学反思
2014/01/19 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
环境卫生标语
2014/06/09 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2015年敬老院工作总结
2015/05/18 职场文书