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呢? 那就是项目驱动法&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
