快速上手Flask(二) flask-restful以及全局响应配置

文章目录

  • 快速上手Flask(二) flask-restful以及全局响应配置
    • 什么是flask-restful
      • 安装flask_restful
      • flask_restful 使用
      • flask 使用@app.route 装饰器自定义路由
    • 全局响应配置
      • flask的自带的jsonify方法
      • JSONIFY_PRETTYPRINT_REGULAR
      • JSONIFY_MIMETYPE
      • 重写jsonify方法

快速上手Flask(二) flask-restful以及全局响应配置

什么是flask-restful

GitHub:https://github.com/flask-restful/flask-restful
英文文档:https://flask-restful.readthedocs.io/en/latest/
中文文档:http://www.pythondoc.com/Flask-RESTful/

Flask-RESTful 就是 Flask 扩展中的佼佼者,它增加了对快速构建 RESTful API 的支持,将 Flask 封装了一层,使其更容易、更快速、更便捷的开发 RESTful API。

REST API 通过 HTTP 请求进行通信,完成以下功能——创建、读取、更新和删除数据。它们也称为 CRUD 操作。REST 提供有关请求资源的信息,并使用四种方法来描述如何处理资源:
POST — 创建资源;
GET — 获取资源;
PUT — 更新资源;
DELETE — 删除资源。

flask-restful是flask模块的一个扩展,能够快速构建restful风格的api。对于其他的扩展也有很高的兼容性。

  • 资源类:Flask-RESTful 提供了一个 Resource 基类,可以用来创建资源。Resource 类包含了 HTTP 方法(GET、POST、PUT、DELETE 等)的处理逻辑,并提供了一些方便的方法来处理请求和响应。
  • 请求参数解析:Flask-RESTful 提供了一个 RequestParser 类,用于解析请求参数。RequestParser 可以自动将查询参数、表单参数、JSON 参数等解析成 Python 类型,并提供了一些选项来指定参数的类型、默认值、必须存在等限制条件。
  • 响应格式化:Flask-RESTful 提供了一个 marshal_with() 装饰器,用于格式化响应数据。marshal_with() 装饰器可以将 Python 对象转换成指定的输出格式(如 JSON、XML 等),并支持指定输出字段、字段类型、嵌套字段等功能。
  • 路由定义: Flask-RESTful 提供了一个 Api 类,用于定义路由和资源的映射关系。Api 类包含了 add_resource()方法,用于将资源类和 URL 路由绑定起来。
  • 异常处理:Flask-RESTful 提供了一些异常类,用于处理 HTTP 请求和响应中的错误。Flask-RESTful 的异常类包括 abort、HTTPException 等,可以方便地处理 HTTP 状态码、错误信息等。

安装flask_restful

pip3 install flask-restful

flask_restful 使用

Flask-RESTful 提供了一个 Resource 基础类,它能够定义一个给定 URL 的一个或者多个 HTTP 方法

from flask import Flask
from flask.ext.restful import Api, Resourceapp = Flask(__name__)
api = Api(app)class UserAPI(Resource):def get(self, id):passdef put(self, id):passdef delete(self, id):passapi.add_resource(UserAPI, '/users/<int:id>', endpoint = 'user')

flask 使用@app.route 装饰器自定义路由

Flask 提供的 @app.route 装饰器来可以自定义路由,它是 Flask 中常用的方式。以下是使用 @app.route 装饰器实现自定义路由的示例:

from flask import Flaskapp = Flask(__name__)# 路由类
@app.route('/myclassroute')
class MyRouter:def __init__(self):pass@app.route('/myroute')def my_route_handler(self):return 'This is my custom route!'if __name__ == '__main__':app.run()

类装饰器 @app.route(‘/myclassroute’) 中定义了类级别的路由。这将使整个类中的方法都与 /myclassroute 关联起来。

然后,在类中的方法上使用 @app.route(‘/myroute’) 装饰器来定义方法级别的路由。这些方法级别的路由将与类级别的路由拼接起来,形成完整的路由路径。

在浏览器中访问 http://localhost:5000/myclassroute/myroute 时,将看到返回的文本 “This is my custom route!”。

全局响应配置

flask的自带的jsonify方法

使用flask写api是件很方便的事情, flask内部的jsonify方法可以轻松的返回json数据。

Flask是一个轻量级的Python Web框架,其设计目的是使得Web开发变得更加容易。Flask支持多种扩展库,Flask Jsonify是其中一个非常常用的扩展库。所谓的Jsonify,指的是将Python对象转换为Json对象。Flask Jsonify是Flask库中的一个函数,用来将Python数据结构转换为Json并返回到客户端。

jsonify返回的类型是 <class ‘flask.wrappers.Response’>,一个JSON的响应(response)
jsonify 返回的Response中的几个属性:

  • headers : 设置请求头信息
  • status : String类型的数据,格式为这种:“200 ok”
  • status_code : int 类型,就是状态码,但是不能是自定义的状态码
  • data : 需要返回到前端的数据
  • set_cookie :设置cookie 的值
  • del_cookie :删除cookie ,不会立马删除浏览器上报错的cookie 值,会讲过期时间设置为当前时间,还是cookie 创建的时间,这样就表示过期了,浏览器会自动删除。

关键点: jsonify 返回的Response的headers属性为:Content-Type: application/json ,是标准的json格式。区别于josn.dumps(data)返回的Response的headers属性为:Content-Type: text/html; charset=utf-8,这就是要封装出jsonify方法的主要目的。
jsonify还有一个特性是:jsonify自动去除了JSON格式中逗号冒号间的空格,起到了压缩数据的作用。(实际上就是用了 json.dumps(data, separators=(‘,’, ‘:’)) 处理。)

Flask Jsonify的使用非常简单,我们只需要在Python代码中导入该扩展库,并且在需要返回Json结果的函数中使用该方法即可。下面是一个使用Flask Jsonify的示例代码:

from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/user_info')
def user_info():user = {'name': '小明','age': 18,'gender': '男'}return jsonify(user)if __name__ == '__main__':app.run()

我们定义了一个/user_info的路由,当用户访问该路由时,会返回一个Json格式的用户信息。其中,我们使用了Flask Jsonify函数将Python字典对象转换为了Json对象。

Flask Jsonify函数支持多种参数类型

  1. 字典类型的参数是使用最为广泛的一种情况,我们可以直接将一个Python字典对象传递给Flask Jsonify函数,该函数会将该字典对象转换为Json。
  2. 列表类型的参数
    列表类型的参数也可以被Flask Jsonify函数识别并转换为Json。我们可以将一个Python列表对象传递给Flask Jsonify函数,该函数会将该列表对象转换为Json。

jsonify函数使用的是Python内置的json模块进行序列化操作,因此需要确保序列化的对象是支持JSON序列化的类型.

JSONIFY_PRETTYPRINT_REGULAR

JSONIFY_PRETTYPRINT_REGULAR 是一个 Flask 应用程序配置选项,用于指定在返回 JSON 响应时是否进行美化打印。默认情况下,它的值为 True,表示启用美化打印。

你可以在 Flask 应用程序的配置中添加 ‘JSONIFY_PRETTYPRINT_REGULAR’ 键,并设置其对应的值。以下是一个示例:

app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False  # 禁用 JSON 响应的美化打印

确保在创建 Flask 应用程序对象之后、在使用 app.run() 启动应用程序之前,设置正确的配置值。

JSONIFY_MIMETYPE

‘JSONIFY_MIMETYPE’ 是 Flask 应用程序的配置选项之一,用于指定 JSON 响应的 MIME 类型。

你可以在 Flask 应用程序的配置中添加 ‘JSONIFY_MIMETYPE’ 键,并设置其对应的值。以下是一个示例:

app.config['JSONIFY_MIMETYPE'] = 'application/json'

确保在创建 Flask 应用程序对象之前、在使用 app.run() 启动应用程序之前,设置正确的配置值。

重写jsonify方法

关于flask的jsonify序列化dict后的结果会自动根据key的下标升序排列,希望dict原样返回的方法【重写jsonify方法】
参考URL: https://dandelioncloud.cn/article/details/1443061478801911810/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣【四数之和】

一、题目描述 18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#x…

大数据开发之电商数仓(hadoop、flume、hive、hdfs、zookeeper、kafka)

第 1 章&#xff1a;数据仓库 1.1 数据仓库概述 1.1.1 数据仓库概念 1、数据仓库概念&#xff1a; 为企业制定决策&#xff0c;提供数据支持的集合。通过对数据仓库中数据的分析&#xff0c;可以帮助企业&#xff0c;改进业务流程、控制成本&#xff0c;提高产品质量。 数据…

C#中chart控件

C#中chart控件 图表的5大集合 例子 第一步&#xff1a;创建工程 放入chart控件 series集合 选择图标类型 选择绘制曲线的宽度和颜色。 显示数据标签 Title集合 添加标题 调整标题字体&#xff1a;大小和颜色 CharsArea集合 对坐标轴进行说明 设置间隔 设置刻度…

【线性代数与矩阵论】矩阵的谱半径与条件数

矩阵的谱半径与条件数 2023年11月18日 文章目录 矩阵的谱半径与条件数1. 矩阵的谱半径2. 谱半径与范数的关系3. 矩阵的条件数下链 1. 矩阵的谱半径 定义 设 A ∈ C n n {A\in \mathbb C^{n \times n} } A∈Cnn &#xff0c; λ 1 , λ 2 , ⋯ , λ n { \lambda_1,\lambda_2…

第11章_常用类和基础API拓展练习(字符串相关练习,日期时间API练习,比较器练习,其它API练习)

文章目录 第11章_常用类和基础API拓展练习字符串相关练习1&#xff1a;阅读题1、length说明2、阅读代码&#xff0c;分析结果3、阅读代码&#xff0c;分析结果4、阅读代码&#xff0c;分析结果5、阅读代码&#xff0c;分析结果6、阅读代码&#xff0c;分析结果7、阅读代码&…

【Linux】Linux基本操作(二):rm rmdir man cp mv cat echo

承接上文&#xff1a; 【【Linux】Linux基本操作&#xff08;一&#xff09;&#xff1a;初识操作系统、ls、cd、touch、mkdir、pwd 】 目录 1.rmdir指令 && rm 指令&#xff1a; rmdir -p #当子目录被删除后如果父目录也变成空目录的话&#xff0c;就连带父目录一…

Elasticsearch 字段更新机制

目录 不支持原地更新 更新过程 段合并&#xff08;Segment Merge&#xff09; 结论 不支持原地更新 Elasticsearch 不支持原地更新&#xff08;in-place update&#xff09;索引中的单个字段。由于 Elasticsearch 使用了不可变的倒排索引&#xff0c;一旦文档被写入&#x…

崩溃了!我说用attach进行问题定位,面试官问我原理

Arthas&#xff08;阿尔萨斯&#xff09;是一款开源的Java诊断和监控工具&#xff0c;可以在生产环境中进行实时的应用程序分析和故障排查。Arthas的实现原理主要基于Java Instrumentation API和Java Agent技术。 Java Agent 是 Java 编程语言提供的一种特殊机制&#xff0c;允…

多模态是什么意思,在生活工业中有哪些应用?

问题描述&#xff1a;多模态是什么意思&#xff0c;在生活工业中有哪些应用&#xff1f; 问题解答&#xff1a; 多模态&#xff08;Multimodal&#xff09;指的是同时利用多种不同模式或传感器的情境、系统或技术。在不同领域&#xff0c;多模态可以涉及到多种感官或信息源的…

第4周:综合应用和实战项目 Day 25-27: 模型调优和优化学习高级技巧

第4周&#xff1a;综合应用和实战项目 Day 25-27: 模型调优和优化学习高级技巧 在这个阶段&#xff0c;我们将专注于提高模型的性能&#xff0c;通过使用高级技巧如正则化、dropout、批标准化等。这些技术对于防止过拟合和提高模型的泛化能力非常重要。 重点学习内容&#xff…

springboot(ssm电子产品销售网站 在线购物商城系

springboot(ssm电子产品销售网站 在线购物商城系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09;…

3.php开发-个人博客项目输入输出类留言板访问IPUA头来源

目录 知识点 : 输入输出 配置环境时&#xff1a; 搜索框&#xff1a; 留言板&#xff1a; 留言板的显示&#xff08;html&#xff09;&#xff1a; php代码显示提交的留言&#xff1a; 写入数据库 对留言内容进行显示&#xff1a; php全局变量-$_SERVER 检测来源 墨…

AMEYA360:航顺HK32AUTO39A—适用车载娱乐系统优化方案

车载娱乐系统&#xff0c;顾名思义最开始其功能主要是为驾驶员和乘客提供娱乐体验&#xff0c;但现在智能座舱时代到来&#xff0c;车载信息娱乐系统已成为“人-车-环境”交互的重要载体&#xff0c;是除了驾驶以外的其他任务的中心。 从功能模块上看&#xff0c;车载娱乐系统从…

【算法练习Day50】下一个更大元素II接雨水

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 下一个更大元素II接雨水单调…

批量终结ascp linux系统中,批量停止kill进程

假如我想批量kill ascp进程 #!/bin/bash# Get PIDs of all running ascp processes pids$(ps -ef | grep [a]scp | awk {print $2})# Loop through each PID and try to terminate the process gracefully for pid in $pids; doecho "Attempting to gracefully terminat…

Apache Wicket 9.10.0发布

Apache Wicket 是一个开源的面向 Java 组件的 Web 应用框架&#xff0c;为政府、商店、大学、城市、银行、电子邮件提供商等成千上万的 Web 应用和网站提供支持。 Wicket 的开发中使用了语义版本&#xff0c;因此与 9.0.0 相比&#xff0c;9.10 版本没有出现 API 中断。 9.10…

9.4 Lambda表达式

9.4 Lambda表达式 1 Lambda语法2. 基于Lambda实现函数式编程3. Stream流式处理 1 Lambda语法 2. 基于Lambda实现函数式编程 3. Stream流式处理

常见的点云下载地址/点云集合/点云库30个

1、pcl库自带教程所需的点云数据下载地址 Point Cloud Library - Browse /PCD datasets at SourceForge.net 另外一个地址 https://github.com/PointCloudLibrary/data 31、新增&#xff1a;VTK库的点云数据下载地址&#xff0c;包含.vtk\ply\pdb\vtp\tif\stl等格式的点云数据 …

【C++】结构体

目录 1.结构体基本概念 2.结构体的定义和使用 3.结构体数组 4.结构体指针 5.结构体嵌套结构体 6.结构体做函数参数 7.结构体中const使用场景 1.结构体基本概念 结构体属于用户 ---- 自定义的数据类型&#xff0c;允许用户储存不同的数据类型 2.结构体的定义和使用 语法…

【网站项目】基于SSM的273校园二手交易网站

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…