FastAPI 学习行动指南
本指南将帮助你系统地学习 FastAPI,从基础到进阶,循序渐进。
第一周:FastAPI 基础入门
学习目标
掌握 FastAPI 的核心概念,能够创建简单的 API 应用。
任务清单
[ ] 安装 FastAPI 和 Uvicorn
bashpip install fastapi uvicorn # 或使用 Poetry poetry add fastapi uvicorn[ ] 阅读 FastAPI 官方文档 "Tutorial - User Guide"
- 网址:https://fastapi.tiangolo.com/tutorial/
- 重点章节:
- First Steps
- Path Parameters
- Query Parameters
- Request Body
- Query Parameters and String Validations
- Path Parameters and Numeric Validations
[ ] 创建第一个 FastAPI 应用
- 创建
main.py - 实现基本的 GET/POST 路由
- 运行并访问
/docs查看自动文档
- 创建
[ ] 掌握路由定义和请求参数处理
- 路径参数:
@app.get("/items/{item_id}") - 查询参数:
def read_item(q: str = None) - 请求体:使用 Pydantic 模型
- 路径参数:
[ ] 学习 Pydantic 模型定义
- BaseModel 基础使用
- 字段验证(Field)
- 嵌套模型
- 模型继承
[ ] 了解依赖注入系统
Depends()基础用法- 子依赖
- 类作为依赖
本周产出
- 一个能运行的简单 FastAPI 项目
- 包含 CRUD 操作的基础 API
常见问题
Q: Pydantic v1 和 v2 有什么区别?
- A: v2 性能更好,API 有变化(如
dict()→model_dump())
- A: v2 性能更好,API 有变化(如
Q: 同步和异步路由怎么选择?
- A: 有 IO 操作(数据库、文件)用 async,纯计算用 sync
第二周:数据库与 ORM
学习目标
掌握使用 SQLModel 进行数据库操作,实现完整的数据持久化。
任务清单
[ ] 学习 SQLModel 基础
- 阅读
/FastAPI/doc/SQLModel详解.md - 模型定义(
table=True) - 字段类型和约束
- 阅读
[ ] 数据库连接与会话管理
- 创建数据库引擎
- 使用
Session进行 CRUD - 依赖注入获取会话
[ ] 实现完整的 CRUD API
- Create: POST 创建资源
- Read: GET 查询(单条/列表)
- Update: PUT/PATCH 更新
- Delete: DELETE 删除
[ ] 学习关系模型
- 一对一关系
- 一对多关系
- 多对多关系
- 使用
Relationship()和back_populates
[ ] 数据库迁移(Alembic)
- 安装:
pip install alembic - 初始化:
alembic init alembic - 创建迁移:
alembic revision --autogenerate - 执行迁移:
alembic upgrade head
- 安装:
本周产出
- 连接数据库的 FastAPI 项目
- 包含关系模型的完整 API
- 数据库迁移配置
实践项目
创建一个「博客系统」API:
- 用户(User)和文章(Post)一对多关系
- 文章和标签(Tag)多对多关系
- 实现完整的 CRUD
第三周:认证与安全
学习目标
掌握 API 安全机制,实现用户认证和权限控制。
任务清单
[ ] 环境变量管理
- 使用
pydantic-settings - 创建
.env文件 - 区分开发/生产配置
- 使用
[ ] 密码安全
- 使用
passlib进行密码哈希 - bcrypt 算法
- 验证密码
- 使用
[ ] JWT 认证
- 安装:
pip install python-jose - Token 生成与验证
- 登录接口实现
- 受保护路由
- 安装:
[ ] OAuth2 密码流程
OAuth2PasswordBearerOAuth2PasswordRequestForm- 集成 Swagger UI 认证
[ ] 权限控制
- 基于角色的权限(RBAC)
- 依赖注入实现权限检查
- 全局异常处理
本周产出
- 带用户认证的 API
- JWT Token 机制
- 权限控制实现
实践项目
为第二周的博客系统添加:
- 用户注册/登录
- JWT Token 认证
- 只有作者能编辑/删除自己的文章
- 管理员可以删除任何文章
第四周:测试与部署
学习目标
掌握 FastAPI 测试方法,学会部署到生产环境。
任务清单
[ ] 单元测试
- 使用
TestClient - 测试路由和响应
- 断言状态码和数据
- 使用
[ ] 异步测试
pytest-asyncioAsyncClient- 测试异步函数
[ ] 数据库测试
- 测试数据库配置
- Fixture 使用
- 依赖覆盖(
dependency_overrides)
[ ] Docker 部署
- 编写 Dockerfile
- docker-compose 配置
- 多阶段构建优化
[ ] 生产环境配置
- Gunicorn + Uvicorn
- 环境变量配置
- 日志配置
本周产出
- 完整的测试套件
- Docker 化部署配置
- 生产环境运行指南
实践项目
- 为博客系统编写测试(覆盖率 > 80%)
- 创建 Docker 部署配置
- 部署到云服务器(可选)
第五周:高级特性与优化
学习目标
掌握 FastAPI 高级特性,优化应用性能。
任务清单
[ ] 中间件
- 请求日志中间件
- CORS 配置
- 自定义中间件
[ ] 后台任务
BackgroundTasks- 发送邮件
- 异步处理
[ ] WebSocket
- 实时通信
- ConnectionManager
- 广播消息
[ ] 性能优化
- 异步数据库查询
- 缓存(Redis)
- 连接池配置
- GZip 压缩
[ ] API 版本控制
- URL 版本前缀
- 版本化路由
本周产出
- 带中间件的 API
- WebSocket 实时功能
- 性能优化配置
实践项目
为博客系统添加:
- 请求日志记录
- WebSocket 实时通知(新评论提醒)
- Redis 缓存热门文章
- API 版本控制(v1/v2)
第六周:项目实战
学习目标
综合运用所学知识,完成一个完整的项目。
推荐项目
项目一:任务管理系统(Todo App)
功能需求:
- 用户注册/登录(JWT 认证)
- 创建/编辑/删除任务
- 任务分类和标签
- 任务优先级和截止日期
- 文件附件上传
- 邮件通知(后台任务)
技术栈:
- FastAPI + SQLModel
- PostgreSQL
- Redis(缓存)
- Celery(后台任务)
- Docker
项目二:简易电商 API
功能需求:
- 商品管理(CRUD)
- 购物车功能
- 订单系统
- 支付集成(模拟)
- 库存管理
- 用户权限(买家/卖家/管理员)
技术栈:
- FastAPI + SQLModel
- PostgreSQL
- JWT 认证
- 事务处理
- 单元测试
项目要求
- [ ] 完整的 API 文档
- [ ] 单元测试覆盖率 > 80%
- [ ] Docker 部署配置
- [ ] README 文档(安装、运行、API 说明)
- [ ] 代码规范(Black + Ruff)
学习资源
官方文档
推荐教程
参考项目
学习建议
- 循序渐进:每周完成一个阶段,不要跳过基础
- 多动手:看文档不如写代码,每天至少写 1 小时
- 做笔记:记录遇到的问题和解决方案
- 看源码:FastAPI 源码很优秀,值得学习
- 参与社区:GitHub Issues、Discord 频道
问题反馈
学习过程中遇到问题:
- 先查阅官方文档
- 搜索 GitHub Issues
- 在 Discord 频道提问
- 随时问我!
行动指南更新日期:2026-04-14
评论
正在加载评论…