Python实战进阶 No1: RESTful API - 基于Flask的实例说明
Python实战进阶 No1: RESTful API - 基于Flask的实例说明

RESTful API 是一种基于 REST(Representational State Transfer) 架构风格的 Web 服务接口设计规范。它使用 HTTP 协议的标准方法(如 GET、POST、PUT、DELETE 等)来操作资源,通常以 JSON 或 XML 格式返回数据。以下是 RESTful API 的几个关键特性:
- 无状态性:每个请求必须包含所有必要的信息,服务器不会保存客户端的状态。
- 统一接口:通过标准的 HTTP 方法操作资源(URL 表示资源)。
- 分层系统:可以有多个中间层(如负载均衡器、缓存等),但客户端无需知道这些细节。
- 支持多种格式:通常使用 JSON 或 XML 格式传输数据。
如何使用 RESTful API 构建 Web 应用程序
构建一个基于 RESTful API 的 Web 应用程序通常包括以下几个步骤:
- 定义资源和 URL 路径。
- 使用 HTTP 方法(GET、POST、PUT、DELETE)操作资源。
- 返回适当的数据格式(如 JSON)。
- 在客户端通过 HTTP 请求与服务器交互。
Python 实例:使用 Flask 构建 RESTful API
以下是一个简单的 Python 程序,使用 Flask 框架创建一个 RESTful API,用于管理图书列表。
代码实现
from flask import Flask, jsonify, requestapp = Flask(__name__)# 模拟的图书数据库
books = [{"id": 1, "title": "Python编程", "author": "张三"},{"id": 2, "title": "Flask入门", "author": "李四"},{"id": 3, "title": "机器学习基础", "author": "王五"}
]# 获取所有图书 (GET)
@app.route('/books', methods=['GET'])
def get_books():return jsonify({"books": books})# 根据 ID 获取单本图书 (GET)
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):book = next((b for b in books if b["id"] == book_id), None)if book:return jsonify(book)else:return jsonify({"error": "Book not found"}), 404# 添加新图书 (POST)
@app.route('/books', methods=['POST'])
def add_book():new_book = request.get_json()books.append(new_book)return jsonify(new_book), 201# 更新图书信息 (PUT)
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):updated_data = request.get_json()book = next((b for b in books if b["id"] == book_id), None)if book:book.update(updated_data)return jsonify(book)else:return jsonify({"error": "Book not found"}), 404# 删除图书 (DELETE)
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):global booksbooks = [b for b in books if b["id"] != book_id]return jsonify({"message": "Book deleted"})if __name__ == '__main__':app.run(debug=True)
运行和测试
-
运行程序:
将上述代码保存为app.py,然后在终端中运行:python app.py默认情况下,Flask 应用会在
http://127.0.0.1:5000/启动。 -
测试 API(在 cmd 窗口中运行 或 通过 Html 调用):
-
获取所有图书:
curl http://127.0.0.1:5000/books -
返回结果
-
{"books": [{"author": "\u5f20\u4e09","id": 1,"title": "Python\u7f16\u7a0b"},{"author": "\u674e\u56db","id": 2,"title": "Flask\u5165\u95e8"},{"author": "\u738b\u4e94","id": 3,"title": "\u673a\u5668\u5b66\u4e60\u57fa\u7840"}]
}
- 获取单本图书:
curl http://127.0.0.1:5000/books/1- 返回结果
{"author": "\u5f20\u4e09","id": 1,"title": "Python\u7f16\u7a0b"
}
-
添加新图书:
curl -X POST -H "Content-Type: application/json" -d "{\"id\": 4, \"title\": \"人工智能\", \"author\": \"赵六\"}" http://127.0.0.1:5000/books -
返回结果
{"author": "\u8d75\u516d","id": 4,"title": "\u4eba\u5de5\u667a\u80fd"
}
-
更新图书信息:
curl -X PUT -H "Content-Type: application/json" -d “{\"title\": \"深度学习\"}' http://127.0.0.1:5000/books/1 -
返回结果
{"author": "\u5f20\u4e09","id": 1,"title": "\u6df1\u5ea6\u5b66\u4e60"
}
- 删除图书:
curl -X DELETE http://127.0.0.1:5000/books/1 - 返回结果
{"message": "Book deleted"
}
总结
通过这个例子,我们展示了如何使用 Flask 创建一个简单的 RESTful API 来管理图书数据。你可以根据实际需求扩展功能,例如连接数据库、添加用户认证等。RESTful API 的核心思想是通过 HTTP 方法和资源路径实现清晰、可扩展的接口设计。
相关文章:
Python实战进阶 No1: RESTful API - 基于Flask的实例说明
Python实战进阶 No1: RESTful API - 基于Flask的实例说明 RESTful API 是一种基于 REST(Representational State Transfer) 架构风格的 Web 服务接口设计规范。它使用 HTTP 协议的标准方法(如 GET、POST、PUT、DELETE 等)来操作资…...
Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器(示例) 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…...
OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression
OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::LogisticRegression 是 OpenCV 机器学习模块中的一个类,用于实现逻辑回归算法。逻辑回归是一种广泛应用于分类问题的统计方法,特别适合二分类任务。…...
百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用
在私有云环境中成功部署 DeepSeek 满血版并实现性能调优,并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试,成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...
批处理效率提升技巧
在数据量大的后端应用程序中进行批处理(batch processing)是非常常见的需求,尤其是在需要处理大量数据或进行周期性任务时。批处理的目的是通过将数据分批次处理来提高效率,减少资源消耗,并确保应用程序的可伸缩性。以下是一些在这种场景下进行批处理的方法和实践: 一、…...
Kubernetes知识点总结(十)
什么是 K8s 的 namespace? 在 K8s 中,Namespace(名字空间)提供了一种机制,将同一集群中的资源划分为相互隔离的组, 是在多个用户之间划分集群资源的一种方法。 名字空间作用域仅针对带有名字空间的对…...
安全防御综合练习2 nat+智能选路
一、拓扑 二、需求 1、在企业出口防火墙上,设置一个“虚拟DNS服务器”,将内网用户的DNS设定为这个虚拟DNS服务器的地址 2、当内网用户发送DNS请求时,虚拟DNS服务器作为中间人,根据预配置算法,将DNS请求报文发送给各个…...
Flutter 中的数据跨层传递方案
在 Flutter 中,数据跨层传递(从父组件向子组件传递数据,或从子组件向父组件传递)有多种方案,主要包括以下几种: 1. 直接参数传递(Constructor 参数) 适用场景: 父组件向…...
代码随想录D50-51 图论 Python
理论基础 理论基础部分依然沿用代码随想录教程中的介绍: 图的种类 度 连通性 连通性用于表示图中节点的连通情况。 如果有节点不能到达其他节点,则为非连通图,想象将多个水分子表示为图,不考虑非键作用,这张图就不是…...
MyBatis进阶
日志的使用 我们在使用MyBatis的时候, 其实MyBatis框架会打印一些必要的日志信息, 在开发阶段这些日志信息对我们分析问题,理解代码的执行是特别有帮助的; 包括项目上线之后,我们也可以收集项目的错误日志到文件里面去; 所以我们采用专门的日志系统来处理. 步骤 导入坐标拷贝…...
容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案
一、docker 部署kafka单节点 1.1安装docker 可以参考这篇CentOS 7安装docker并配置镜像加速 1.3 运行kafka(注意修改zookeeper,kafka地址) docker run -d --name kafka -e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://172.16.10.180:9092 -p …...
DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析:如何…...
LeetCode-633. 平方数之和
1、题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 b2 c 。 示例 1: 输入:c 5 输出:true 解释:1 * 1 2 * 2 5示例 2: 输入:c 3 输出:f…...
前端面试技巧与实践
在当今快速发展的互联网行业中,前端开发已经成为了一个至关重要的角色。随着技术的不断进步和用户需求的日益复杂,前端工程师的职责不再仅仅是实现页面的布局和交互,而是需要具备全方位的技术能力和工程思维。根据2023年Stack Overflow的开发…...
windows Redis Insight 如何查看宝塔docker里的redis数据
1、ping 命令用于测试网络连通性,它只需要目标 IP 地址作为参数,不需要端口号。正确的命令如下: ping 公网地址2、使用 Telnet 测试端口连通性 telnet 公网地址 端口 telnet 47.108.67.228 6379如果连接成功,窗口会变为空白&am…...
sql数据执行失败,三个命令依次执行
set global innodb_strict_mode off set global.sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION; set sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION;...
BGP配置华为——RR反射器配置
实验拓扑 与之前实验同理将loop0作为routerID使用,且R1和R2上用loop1接口用于模拟用户其他网段 实验要求 1,在AS100内运行OSPF协议 2.配置路由反射器,使得从R1进入的数据能够反射到全局网络 3.在R1和R2上分别宣告自己的loop1口网段用于观…...
基于Flask的艺恩影片票房分析系统的设计与实现
【Flask】基于Flask的艺恩影片票房分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统利用Python编程语言进行后端开发,结合Echarts进行数据的可视化展示&a…...
架构设计系列(三):架构模式
一、概述 关于移动应用开发中常见的架构模式,这些模式是为了克服早期模式的局限性而引入。常见的 架构模式有: MVC, MVP, MVVM, MVVM-C, and VIPER 二、MVC, MVP, MVVM, MVVM-C, and VIPER架构模式 MVC、MVP、MVVM、MVVM-C 和 VIPER 是移动应用开发中…...
零基础学QT、C++(一)安装QT
目录 如何快速学习QT、C呢? 一、编译器、项目构建工具 1、编译器(介绍2款) 2、项目构建工具 二、安装QT 1、下载QT安装包 2、运行安装包 3、运行QT creator 4、导入开源项目 总结 闲谈 如何快速学习QT、C呢? 那就是项目驱动法&…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
