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

两小时快速入门 FastAPI--第二回

两小时快速入门 FastAPI–第二回

FastAPI 实战:完成一个简单的 Todo 查询接口

一、FastAPI 简介

FastAPI 是一个用于开发 Web API 的 Python 框架,支持路径参数、查询参数、类型校验和自动接口文档。

本次练习使用 Python 列表临时保存 Todo 数据,并通过不同接口实现:

  • 获取全部任务
  • 按完成状态筛选任务
  • 统计任务数量
  • 根据 ID 查询单个任务

项目启动后,可以访问下面的地址查看 Swagger 接口文档:

http://127.0.0.1:8000/docs

二、本次任务目标

本次练习主要完成一个简单的 Todo 查询 API:

  • 创建临时 Todo 数据
  • 获取全部 Todo
  • 根据完成状态筛选 Todo
  • 统计总任务数和已完成任务数
  • 根据任务 ID 查询单个 Todo
  • 使用curl.exe测试接口

三、完成任务的整个流程

1. 编写 Todo API

打开项目中的main.py,写入以下代码:

fromfastapiimportFastAPI# 创建 FastAPI 应用实例。# title 会显示在自动生成的 Swagger 文档页面里。app=FastAPI(title="我的两个小时FastAPI练习")# 定义一个 Todo 列表,作为当前项目的临时数据。(接口下的代办和状态)# 这里没有连接数据库,所以数据只保存在程序运行时的内存中。todos=[{"id":1,"title":"学习FastAPI","done":False},{"id":2,"title":"写一个Todoapi","done":True},]# 定义根路径接口。# 当访问 http://127.0.0.1:8000/ 时,会执行这个函数。@app.get("/")defroot():# 返回一个简单的 JSON 消息,用来表示服务已经正常启动。return{"message":"FastAPI 已经启动"}# 定义获取 Todo 列表的接口。# done 是一个可选查询参数,可以按完成状态筛选任务。# 例如:/todos?done=true 或 /todos?done=false@app.get("/todos")deflist_todos(done:bool|None=None):# 如果没有传入 done 参数,就直接返回全部 Todo。ifdoneisNone:returntodos# 如果传入了 done 参数,就只返回状态匹配的 Todo。return[todofortodointodosiftodo["done"]==done]# 定义统计 Todo 数量的接口。# 这个接口会返回总任务数,以及已经完成的任务数。@app.get("/todos/count")deftodo_count():# total 表示全部任务数量。# completed 表示 done 为 True 的任务数量。return{"total":len(todos),"completed":len([todofortodointodosiftodo["done"]]),}# 定义根据任务 id 获取单个 Todo 的接口。# todo_id 是路径参数,例如访问 /todos/1 时,todo_id 的值就是 1。@app.get("/todos/{todo_id}")defget_todo(todo_id:int):# 遍历 todos 列表,查找 id 和传入参数一致的任务。fortodointodos:iftodo["id"]==todo_id:returntodo# 如果没有找到对应 id 的任务,就返回提示信息。return{"message":"Todo not found"}

这里使用的todos是一个普通 Python 列表,并没有连接数据库。

因此,数据只会保存在程序运行时的内存中。程序重新启动后,数据会恢复为代码中定义的内容。

结果如图所示:


2. 获取 Todo 列表

获取全部任务的接口为:

GET /todos

访问地址:

http://127.0.0.1:8000/todos

还可以通过done查询参数筛选任务。

查询已完成任务:

http://127.0.0.1:8000/todos?done=true

查询未完成任务:

http://127.0.0.1:8000/todos?done=false

done没有出现在接口路径中,因此它属于查询参数。


3. 统计 Todo 数量

统计接口为:

GET /todos/count

使用 PowerShell 测试:

curl.exe"http://127.0.0.1:8000/todos/count"

返回结果:

{"total":2,"completed":1}

其中:

  • total表示全部任务数量
  • completed表示已经完成的任务数量

4. 根据 ID 查询 Todo

查询单个任务的接口为:

GET /todos/{todo_id}

其中,todo_id是路径参数。

查询 ID 为1的任务:

curl.exe"http://127.0.0.1:8000/todos/1"

返回:

{"id":1,"title":"学习FastAPI","done":false}

查询 ID 为2的任务:

curl.exe"http://127.0.0.1:8000/todos/2"

返回:

{"id":2,"title":"写一个Todoapi","done":true}

如果传入的 ID 不存在,接口会返回:

{"message":"Todo not found"}

需要注意,固定路径/todos/count应写在动态路径/todos/{todo_id}前面,避免 FastAPI 将count当成todo_id处理。


四、总结

本次练习完成了一个简单的 Todo 查询 API,主要学习了:

  • 使用 Python 列表临时保存数据
  • 使用查询参数筛选任务
  • 使用路径参数查询单个任务
  • 使用列表推导式统计和筛选数据
  • 使用curl.exe测试 FastAPI 接口
  • 理解固定路径和动态路径的定义顺序

目前的接口只能查询数据,下一步可以继续增加新增、修改和删除 Todo 的接口,完成一个基础的 Todo CRUD 项目。

http://www.jsqmd.com/news/1177613/

相关文章:

  • IntelliJ IDEA 从卡顿到起飞,只用改这些。。。
  • IDEA Git Undo Commit 实战:3种场景(未Push/已Push/误操作)与 Force Push 风险规避
  • 为什么顶尖Rust团队已弃用VS Code转向Cursor?深度拆解其Rust分析引擎的3层抽象设计与性能实测数据
  • 收到这份年中报告
  • 终极macOS窗口管理指南:用Loop告别桌面混乱的完整教程
  • 一抹玫红落在鸡心盏上,茶席也暖了起来
  • 第1章 上电、固件与 x86_64 启动契约
  • 2026适合资深记者深度人物采访场景 面试记录整理哪个好
  • Agent是什么?
  • 抖音内容管理革命:如何用Python工具高效批量下载无水印视频
  • 2026年最新教程:视频怎么变成音频 亲测好用的免费方法 - 图片处理研究员
  • TensorFlow工业级交付:从SavedModel到Serving的工程实践
  • Ansys Fluent电化学模块电解制氢仿真:从基础到实战
  • 免费开源Windows桌面分区神器:NoFences终极使用指南,让你的桌面整洁如新
  • OpenCV 4.8.0 在 Visual Studio 2022 配置:3步解决“无法打开源文件”与 LNK2019 链接错误
  • VS2022 Qt 6.4 环境配置:MSVC 2022 与 MinGW 双编译器路径解析与 3 步验证
  • TMC7300与PIC18F86K90驱动有刷直流电机方案解析
  • 如何让Windows 11完美运行经典DirectX游戏:DDrawCompat终极解决方案
  • Windows安卓应用安装器:无需模拟器的跨平台解决方案终极指南
  • 数据结构期末复习:8大实验50题核心考点解析与易错点总结
  • 5G NR 帧结构配置实战:2.6GHz/3.5GHz/4.9GHz 三频段 5 种时隙方案详解
  • C++ MySQL数据库访问层设计:连接池、防注入与ORM封装实践
  • C++哈希表实战:从零构建高性能电话号码查找系统
  • C++字符串字面量全解析:从编码到C++23新特性
  • macOS 13 Ventura 安装 Git 2.40:5个常见错误与自动化脚本修复
  • 2026HVV(网络安全护网)行动详解
  • 国货洗衣液深度测评|主流十大高口碑洗衣液牌子全维度横向汇总实测
  • 终极指南:如何用HiveWE打造高性能魔兽争霸III地图编辑器
  • 影刀RPA 团队协作开发:多人维护同一个流程的最佳实践
  • 聊一聊功放接反对立体声的影响