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 os模块学习笔记
Jun 21 Python
发布你的Python模块详解
Sep 15 Python
Python实现Linux中的du命令
Jun 12 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
Python实现简单的语音识别系统
Dec 13 Python
python3 读写文件换行符的方法
Apr 09 Python
Python中一般处理中文的几种方法
Mar 06 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Python类的动态绑定实现原理
Mar 21 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
基于python实现ROC曲线绘制广场解析
Jun 28 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
Python正则表达式的使用范例详解
2014/08/08 Python
Python管理Windows服务小脚本
2018/03/12 Python
Python输入二维数组方法
2018/04/13 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
村官工作鉴定评语
2014/01/27 职场文书
励志演讲稿200字
2014/08/21 职场文书
离婚上诉状范文
2015/05/23 职场文书
汶川大地震感悟
2015/08/10 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
Python编程编写完善的命令行工具
2021/09/15 Python
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis