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列表去重的二种方法
Feb 14 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
python实现比较两段文本不同之处的方法
May 30 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
python实现雪花飘落效果实例讲解
Jun 18 Python
用scikit-learn和pandas学习线性回归的方法
Jun 21 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
Python的信号库Blinker用法详解
Dec 31 Python
python 爬取吉首大学网站成绩单
Jun 02 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 Python
详解OpenCV曝光融合
Apr 29 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文本数据库的搜索方法
2006/10/09 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
重写javascript中window.confirm的行为
2012/10/21 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
Python3内置模块random随机方法小结
2019/07/13 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
python实现图片转字符画的完整代码
2021/02/21 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
美国网上书店:Barnes & Noble
2018/08/15 全球购物
经贸日语毕业生自荐信
2013/11/03 职场文书
大学生求职计划书
2014/04/30 职场文书
施工工地安全标语
2014/06/07 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers