当前位置: 首页 > news >正文

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 的几个关键特性:

  1. 无状态性:每个请求必须包含所有必要的信息,服务器不会保存客户端的状态。
  2. 统一接口:通过标准的 HTTP 方法操作资源(URL 表示资源)。
  3. 分层系统:可以有多个中间层(如负载均衡器、缓存等),但客户端无需知道这些细节。
  4. 支持多种格式:通常使用 JSON 或 XML 格式传输数据。

如何使用 RESTful API 构建 Web 应用程序

构建一个基于 RESTful API 的 Web 应用程序通常包括以下几个步骤:

  1. 定义资源和 URL 路径。
  2. 使用 HTTP 方法(GET、POST、PUT、DELETE)操作资源。
  3. 返回适当的数据格式(如 JSON)。
  4. 在客户端通过 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)

运行和测试

  1. 运行程序
    将上述代码保存为 app.py,然后在终端中运行:

    python app.py
    

    默认情况下,Flask 应用会在 http://127.0.0.1:5000/ 启动。

  2. 测试 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&#xff08;Representational State Transfer&#xff09; 架构风格的 Web 服务接口设计规范。它使用 HTTP 协议的标准方法&#xff08;如 GET、POST、PUT、DELETE 等&#xff09;来操作资…...

Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)

#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器&#xff08;示例&#xff09; 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…...

OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression

OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::LogisticRegression 是 OpenCV 机器学习模块中的一个类&#xff0c;用于实现逻辑回归算法。逻辑回归是一种广泛应用于分类问题的统计方法&#xff0c;特别适合二分类任务。…...

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...

批处理效率提升技巧

在数据量大的后端应用程序中进行批处理(batch processing)是非常常见的需求,尤其是在需要处理大量数据或进行周期性任务时。批处理的目的是通过将数据分批次处理来提高效率,减少资源消耗,并确保应用程序的可伸缩性。以下是一些在这种场景下进行批处理的方法和实践: 一、…...

Kubernetes知识点总结(十)

什么是 K8s 的 namespace&#xff1f; 在 K8s 中&#xff0c;Namespace&#xff08;名字空间&#xff09;提供了一种机制&#xff0c;将同一集群中的资源划分为相互隔离的组&#xff0c; 是在多个用户之间划分集群资源的一种方法。 名字空间作用域仅针对带有名字空间的对…...

安全防御综合练习2 nat+智能选路

一、拓扑 二、需求 1、在企业出口防火墙上&#xff0c;设置一个“虚拟DNS服务器”&#xff0c;将内网用户的DNS设定为这个虚拟DNS服务器的地址 2、当内网用户发送DNS请求时&#xff0c;虚拟DNS服务器作为中间人&#xff0c;根据预配置算法&#xff0c;将DNS请求报文发送给各个…...

Flutter 中的数据跨层传递方案

在 Flutter 中&#xff0c;数据跨层传递&#xff08;从父组件向子组件传递数据&#xff0c;或从子组件向父组件传递&#xff09;有多种方案&#xff0c;主要包括以下几种&#xff1a; 1. 直接参数传递&#xff08;Constructor 参数&#xff09; 适用场景&#xff1a; 父组件向…...

代码随想录D50-51 图论 Python

理论基础 理论基础部分依然沿用代码随想录教程中的介绍&#xff1a; 图的种类 度 连通性 连通性用于表示图中节点的连通情况。 如果有节点不能到达其他节点&#xff0c;则为非连通图&#xff0c;想象将多个水分子表示为图&#xff0c;不考虑非键作用&#xff0c;这张图就不是…...

MyBatis进阶

日志的使用 我们在使用MyBatis的时候, 其实MyBatis框架会打印一些必要的日志信息, 在开发阶段这些日志信息对我们分析问题,理解代码的执行是特别有帮助的; 包括项目上线之后,我们也可以收集项目的错误日志到文件里面去; 所以我们采用专门的日志系统来处理. 步骤 导入坐标拷贝…...

容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案

一、docker 部署kafka单节点 1.1安装docker 可以参考这篇CentOS 7安装docker并配置镜像加速 1.3 运行kafka&#xff08;注意修改zookeeper&#xff0c;kafka地址&#xff09; docker run -d --name kafka -e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://172.16.10.180:9092 -p …...

DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析&#xff1a;如何…...

LeetCode-633. 平方数之和

1、题目描述 给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a2 b2 c 。 示例 1&#xff1a; 输入&#xff1a;c 5 输出&#xff1a;true 解释&#xff1a;1 * 1 2 * 2 5示例 2&#xff1a; 输入&#xff1a;c 3 输出&#xff1a;f…...

前端面试技巧与实践

在当今快速发展的互联网行业中&#xff0c;前端开发已经成为了一个至关重要的角色。随着技术的不断进步和用户需求的日益复杂&#xff0c;前端工程师的职责不再仅仅是实现页面的布局和交互&#xff0c;而是需要具备全方位的技术能力和工程思维。根据2023年Stack Overflow的开发…...

windows Redis Insight 如何查看宝塔docker里的redis数据

1、ping 命令用于测试网络连通性&#xff0c;它只需要目标 IP 地址作为参数&#xff0c;不需要端口号。正确的命令如下&#xff1a; ping 公网地址2、使用 Telnet 测试端口连通性 telnet 公网地址 端口 telnet 47.108.67.228 6379如果连接成功&#xff0c;窗口会变为空白&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使用&#xff0c;且R1和R2上用loop1接口用于模拟用户其他网段 实验要求 1&#xff0c;在AS100内运行OSPF协议 2.配置路由反射器&#xff0c;使得从R1进入的数据能够反射到全局网络 3.在R1和R2上分别宣告自己的loop1口网段用于观…...

基于Flask的艺恩影片票房分析系统的设计与实现

【Flask】基于Flask的艺恩影片票房分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统利用Python编程语言进行后端开发&#xff0c;结合Echarts进行数据的可视化展示&a…...

架构设计系列(三):架构模式

一、概述 关于移动应用开发中常见的架构模式&#xff0c;这些模式是为了克服早期模式的局限性而引入。常见的 架构模式有&#xff1a; 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呢&#xff1f; 一、编译器、项目构建工具 1、编译器&#xff08;介绍2款&#xff09; 2、项目构建工具 二、安装QT 1、下载QT安装包 2、运行安装包 3、运行QT creator 4、导入开源项目 总结 闲谈 如何快速学习QT、C呢&#xff1f; 那就是项目驱动法&…...

PaddleOCR-VL多模态文档解析技术解析与应用实践

1. 项目背景与核心价值在数字化转型浪潮中&#xff0c;文档解析技术正成为企业降本增效的关键工具。传统OCR&#xff08;光学字符识别&#xff09;系统在面对表格嵌套、多栏排版、图文混排等复杂文档时&#xff0c;识别准确率往往断崖式下跌。PaddleOCR-VL作为飞桨团队推出的多…...

Claude学习笔记【第三章】- Claude Code的基本使用

←上一章 第一部分 章节任务 已经完成了Claude Code的配置&#xff0c;接下来我应该如何使用他? 他能够为我做什么事情? 如何使用slash( / )? 本章将针对上面的问题&#xff0c;教学Claude Code( 命令行下 )的基本使用方法。 第二部分 Claude Code对话 首先是最基本的部…...

静态类型检查落地难?揭秘头部科技公司内部Python标注规范文档(含可直接复用的pyproject.toml模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;静态类型检查落地难&#xff1f;揭秘头部科技公司内部Python标注规范文档&#xff08;含可直接复用的pyproject.toml模板&#xff09; Python 的动态特性赋予开发灵活性&#xff0c;却也让大型项目在协…...

终极Photoshop AI插件SD-PPP:如何让AI绘图与Photoshop无缝协作?

终极Photoshop AI插件SD-PPP&#xff1a;如何让AI绘图与Photoshop无缝协作&#xff1f; 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 还在为AI绘图和Photoshop之间的繁琐切换而烦恼吗&#xff1f;SD-PPP这款革命…...

使用 Python 快速上手 Taotoken 调用多模型完成文本摘要任务

使用 Python 快速上手 Taotoken 调用多模型完成文本摘要任务 1. 准备工作 在开始使用 Taotoken 调用多模型进行文本摘要之前&#xff0c;需要确保 Python 环境已安装 openai 库。可以通过以下命令安装最新版本&#xff1a; pip install openai安装完成后&#xff0c;您需要获…...

AI智能体如何管理可编程数字资产:基于Dual协议与Claude的实践

1. 项目概述&#xff1a;一个能帮你打理数字资产的AI管家 如果你在Web3领域折腾过一阵子&#xff0c;尤其是玩过那些带有复杂规则的可编程代币&#xff0c;那你一定深有体会&#xff1a;管理它们太费劲了。每天得盯着钱包地址&#xff0c;手动检查一堆代币的状态、合规性、转移…...

抖音批量下载神器:3分钟学会无水印高清视频下载

抖音批量下载神器&#xff1a;3分钟学会无水印高清视频下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

Windows上轻量级安卓应用安装神器:告别臃肿模拟器,APK Installer带你开启高效跨平台体验

Windows上轻量级安卓应用安装神器&#xff1a;告别臃肿模拟器&#xff0c;APK Installer带你开启高效跨平台体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否…...

终极指南:用RPFM快速创建你的第一个《全面战争》模组

终极指南&#xff1a;用RPFM快速创建你的第一个《全面战争》模组 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: https://gitc…...

如何在 cplusplus 项目中接入 taotoken 的多模型 api 服务

如何在 C 项目中接入 Taotoken 的多模型 API 服务 1. 准备工作 在开始集成 Taotoken 的多模型 API 服务前&#xff0c;需要确保已完成以下准备工作。首先&#xff0c;访问 Taotoken 控制台创建 API Key&#xff0c;该 Key 将用于后续的身份验证。登录后&#xff0c;在「API 密…...