Django 返回json数据的实现示例

 更新时间:2020年03月05日 08:39:27   作者:从青从争喽  
这篇文章主要介绍了Django 返回json数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在一个网站,大量数据的前后端交互,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


这不是乱码,这是中文在内存中的二进制表现形式而已,使用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')

再访问网页:


现在是传输JSON了,在Preview中可以正常显示出来。

方法二:使用JsonResponse进行传输

def testjson(request):
 data={
  'patient_name': '张三',
  'age': '25',
  'patient_id': '19000347',
  '诊断': '上呼吸道感染',
 }
 return JsonResponse(data)

访问网页:


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)

程序报错了


报错为:In order to allow non-dict objects to be serialized set the safe parameter to False,它的意思是转换为一个非字典的类型时,safe参数要设置为False,还记得上面JsonResponse的原码吗?其中就有


代码修改为:

def testjson(request):
  listdata = ["张三", "25", "19000347", "上呼吸道感染"]
  return JsonResponse(listdata, safe=False)

这有什么用

有时我们从数据库取出来的数据,很多是列表类型的,特别是用cx_Oracle包在Oracle数据库取出来的数据,其不支持直接字典的输出,输出就是一个list,这时我们使用JsonResponse(data, safe=False)就可以直接输换为Json,发送到前端了。

到此这篇关于Django 返回json数据的实现示例的文章就介绍到这了,更多相关Django返回json 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Python绘制台风轨迹图的示例代码

    使用Python绘制台风轨迹图的示例代码

    这篇文章主要介绍了使用Python绘制台风轨迹图的示例代码,帮助大家更好的理解和使用python绘制图形,感兴趣的朋友可以了解下
    2020-09-09
  • Python字符串中添加、插入特定字符的方法

    Python字符串中添加、插入特定字符的方法

    这篇文章主要介绍了Python字符串中添加、插入特定字符的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Python实现批量下载文件的示例代码

    Python实现批量下载文件的示例代码

    下载文件是我们在日常工作中常常要做的一件事情,当我们需要从互联网上批量下载大量文件时,手动一个一个去下载显然不够高效,所以本文为大家介绍一下如何利用python批量下载文件吧
    2023-11-11
  • Python Tkinter简单布局实例教程

    Python Tkinter简单布局实例教程

    这篇文章主要介绍了Python Tkinter简单布局实例教程,包括了填充、左右布局、绝对布局、网格布局等,需要的朋友可以参考下
    2014-09-09
  • python中子类调用父类函数的方法示例

    python中子类调用父类函数的方法示例

    Python中类的初始化方法是__init__(),因此父类、子类的初始化方法都是这个,下面这篇文章主要给大家介绍了关于python中子类调用父类函数的方法示例,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-08-08
  • python实现公司年会抽奖程序

    python实现公司年会抽奖程序

    这篇文章主要为大家详细介绍了python实现公司年会抽奖程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python Spyder 调出缩进对齐线的操作

    Python Spyder 调出缩进对齐线的操作

    这篇文章主要介绍了Python Spyder 调出缩进对齐线的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Pycharm中的下载安装、配置与测试方式

    Pycharm中的下载安装、配置与测试方式

    这篇文章主要介绍了Pycharm中的下载安装、配置与测试方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python 爬取必应壁纸的实例讲解

    Python 爬取必应壁纸的实例讲解

    在本篇文章里小编给大家整理的是一篇关于Python 爬取必应壁纸的实例讲解,有兴趣的朋友们可以跟着学习参考下。
    2020-02-02
  • 讲解Python中for循环下的索引变量的作用域

    讲解Python中for循环下的索引变量的作用域

    这篇文章主要介绍了讲解Python中for循环下的索引变量的作用域,是Python学习当中的基础知识,本文给出了Python3的示例帮助读者理解,需要的朋友可以参考下
    2015-04-04

最新评论