Flask 的 jsonify 理解[通俗易懂]

Flask 的 jsonify 理解[通俗易懂]文章目录python代码解决原因Content-Type的区别python代码#-*-coding:utf-8-*-fromflaskimportFlask,jsonifyapp=Flask(__name__)urls=[{‘id’:1,’title’:’python’,’descripti…

大家好,又见面了,我是你们的朋友全栈君。

python 代码

# -*- coding:utf-8 -*-
from flask import Flask, jsonify

app = Flask(__name__)

urls = [
    { 
   
        'id': 1,
        'title': 'python',
        'description': 'https://www.python.org/'
    },
    { 
   
        'id': 2,
        'title': 'flask',
        'description': 'https://flask.palletsprojects.com/en/1.1.x/'
    }
]


@app.route('/api/urls', methods=['GET'])
def get_tasks():
    return jsonify({ 
   'urls': urls})


if __name__ == '__main__':
    app.run(debug=True)
  • 问题:Flask 框架里,可以使用 jsonify 返回 json 数据,但是为什么不使用 Python 自带的 json 模块返回 JSON 数据呢?

解决

  • jsonify 在处理数据过程中,对数据做 JSON 序列化处理时,用的是 itsdangerous 模块里的 JSON ,通过源代码可以看出,基本是一样的。
  • flask 框架引入过程代码:
from itsdangerous import json as _json
  • 首先会尝试引入simplejson,如果没有安装这个模块,则引入 Python 原生模块json。
try:
    import simplejson as json
except ImportError:
    import json

原因

  • jsonify存在的有意义是Content-Type的不一样。

Content-Type的区别

  1. 使用jsonify序列化。
  • 如本篇的开篇代码:
    在这里插入图片描述
  1. 使用json模块序列化
# -*- coding:utf-8 -*-
from flask import Flask
import json

app = Flask(__name__)

urls = [
    { 
   
        'id': 1,
        'title': 'python',
        'description': 'https://www.python.org/'
    },
    { 
   
        'id': 2,
        'title': 'flask',
        'description': 'https://flask.palletsprojects.com/en/1.1.x/'
    }
]


@app.route('/api/urls', methods=['GET'])
def get_tasks():
    return json.dumps({ 
   'urls': urls})


if __name__ == '__main__':
    app.run(debug=True)

在这里插入图片描述

  • 总结:接口既然返回的是 json 数据,那么自然要指明 Content-Type 是 application/json , 这样做是符合 HTTP 协议的规定的,这就是使用 jsonify 的原因之一 。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142187.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Flask—jsonify方式(api接口)「建议收藏」

    Flask—jsonify方式(api接口)「建议收藏」GET方法post方法PUT方法DELETE方法GET方法fromflaskimportFlask,jsonify,abort,make_responseapp=Flask(__name__)articles=[{‘id’:1,’title’:’thewaytopyt…

    2022年5月10日
    41
  • 如何搭建自己的网站

    如何搭建自己的网站当你看到我这个博客的时候,我猜你应该是学习计算机的朋友,你可能会写一些漂亮的前台界面,或者能写一个小的web项目,但是你可能不知道怎样让自己的这个界面或者项目,只通过一个网址,任何人都可以随时随地进行访问。好的现在就开始手把手教你如何搭建属于自己的个性网站…首先,你需要购买一台自己的服务器,这个服务器的作用就是用来存放你的项目,已达到24小时随时随地进行访问。国内服务器…

    2022年6月29日
    24
  • 高等数学学习笔记——第十四讲——函数极限的概念(1. 函数在无穷远处极限定义)

    高等数学学习笔记——第十四讲——函数极限的概念(1. 函数在无穷远处极限定义)1.问题引入(函数极限概念产生的背景——十六世纪开始在天体运动、航海、炮弹发射等领域对连续变量的研究需要)2.函数自变量的六种变化过程(趋于无穷或有限量,左趋近或右趋近)以时间为例,理解自变量的不同变化过程3.函数极限示例4.函数极限(关于过程x趋于正无穷)的定义ε可以取任意小的正数5.函数极限证明…

    2022年5月5日
    50
  • eclipse SVN插件的缓存清理[通俗易懂]

    eclipse SVN插件的缓存清理[通俗易懂]工具原料:SVN客户端;windowxp;eclipse中的缓存清理主要有: eclipse清理网页缓存; eclipse清理XSD文件缓存; eclipse清理svn账号缓存; 情况一:eclipse清理网页缓存。修改了代码多次刷新页面[已经清除过浏览器缓存]后页面调试仍显示源代码解决步骤:①停止tomcat的运行;②在eclipse中的Servers下找到并选中tomcat,右键选择”clean…”;③重新启动tomcat,刷新页面;④设置b

    2022年10月14日
    5
  • Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)

    Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)一般来说,多线程技术涉及三种方法,其中第一种是使用计时器模块QTimer;第二种是使用多线程模块QThread;最后是使用事件处理的功能。

    2022年5月28日
    28
  • 阿里云社区之新的开始

    阿里云社区之新的开始

    2021年6月13日
    108

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号