当前位置: 首页 > 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; 那就是项目驱动法&…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...

结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案

以下是一个结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案,包含完整数学推导、PyTorch/TensorFlow双框架实现代码及对比实验分析。 基于PINN的反应扩散方程稀疏数据预测与大规模数据泛化能力研究 1. 问题定义与数学模型 1.1 反应扩散方程 考虑标…...

基于Java的离散数学题库系统设计与实现:附完整源码与论文

JAVASQL离散数学题库管理系统 一、系统概述 本系统采用Java Swing开发桌面应用&#xff0c;结合SQL Server数据库实现离散数学题库的高效管理。系统支持题型分类&#xff08;选择题、填空题、判断题等&#xff09;、难度分级、知识点关联&#xff0c;并提供智能组卷、在线测试…...

小白的进阶之路系列之十四----人工智能从初步到精通pytorch综合运用的讲解第七部分

通过示例学习PyTorch 本教程通过独立的示例介绍PyTorch的基本概念。 PyTorch的核心提供了两个主要特性: 一个n维张量,类似于numpy,但可以在gpu上运行 用于构建和训练神经网络的自动微分 我们将使用一个三阶多项式来拟合问题 y = s i n ( x ) y=sin(x) y=sin(x),作为我们的…...

HarmonyOS-ArkUI 自定义弹窗

自定义弹窗 自定义弹窗是界面开发中最为常用的一种弹窗写法。在自定义弹窗中&#xff0c; 布局样式完全由您决定&#xff0c;非常灵活。通常会被封装成工具类&#xff0c;以使得APP中所有弹窗具备相同的设计风格。 自定义弹窗具备的能力有 打开弹窗自定义布局&#xff0c;以…...

Monorepo架构: 项目管理模式对比与考量

关于 monorepo 相关概念及项目管理模式 在软件开发中&#xff0c;尤其是前端项目&#xff0c;我们会涉及到不同的项目管理模式&#xff0c;这里先介绍几个重要的概念“monorepo”是当前较为热门的一种项目管理方式&#xff0c;虽然很多人可能听说过&#xff0c;但可能在实际项…...