首页/Python 框架指南
模块 05 · 后端工程化

Python 框架指南

FastAPI 生态逐个零件拆开讲:路由、Pydantic、SQLAlchemy、依赖注入、JWT、SSE / WebSocket、测试与日志。

14 章Backend

这是一套 FastAPI 生态的 API 用法课程。不带你从零搭一个大工程,而是把每个零件拆开来讲清楚:它是什么、签名长什么样、最小示例怎么写、生产上常栽哪些坑。学完你能拿着手册对号入座,把任何一个 API 稳稳地用到自己的项目里。

课程结构

章 主题 一句话
01 FastAPI 入门与 ASGI 三大框架怎么选、Uvicorn 怎么跑、/docs 说明书怎么看
02 路由与请求响应 五个装饰器、路径/查询参数、请求体、response_model、APIRouter
03 Pydantic 数据校验与配置 Field 约束、校验器、BaseSettings 读 .env、DTO 三兄弟
04 SQLAlchemy 异步引擎与会话 create_async_engine、连接池、会话三种提交方式
05 ORM 建模 DeclarativeBase、外键、一对多/多对多、Mixin
06 SQL 表达式与数据操作 select/where/order_by、聚合分组、update/delete、防注入
07 Alembic 数据迁移 init 目录、autogenerate、手写 op、版本链管理
08 依赖注入 Depends 全家桶、yield 依赖、嵌套、测试换替身
09 统一异常处理 业务异常体系、错误码设计、exception_handler 注册
10 中间件 洋葱模型、计时、CORS、统一响应信封、注册顺序
11 认证与 JWT bcrypt 存密码、JWT 签发验票、get_current_user、/docs 的锁
12 pytest 测试 fixture、参数化、TestClient、异步测试、依赖覆盖
13 日志 loguru sink/轮转/上下文绑定、接管标准 logging、request_id
14 流式响应 SSE 与 WebSocket StreamingResponse、SSE 协议、WebSocket 广播、选型

章与章之间有衔接:04 章埋的 get_db,08 章正式展开,12 章拿它做依赖覆盖;09 章统一错误出口,10 章统一成功信封;10 章预告的 contextvars,13 章日志 request_id 兑现。建议按顺序过一遍第一遍,之后当手册查。

环境准备

# 需要 Python 3.12+ 和 uv
# 每章的 demo 都是单文件,装好依赖直接跑:
uv init          # 第一次进入某章目录时(或直接用下面的 add)
uv add fastapi "uvicorn[standard]"
uv run demo/demo_app.py

各章额外依赖在课件和 demo 文件头部注释里写明:

  • 04~07 章:uv add sqlalchemy aiosqlite(demo 用 SQLite 零环境可跑;课件主线讲 PostgreSQL,换库只改连接串一行)
  • 11 章:uv add pyjwt bcrypt python-multipart
  • 12 章:uv add --dev pytest pytest-asyncio httpx
  • 13 章:uv add loguru
  • 14 章:uv add sse-starlette websockets(可选,WebSocket 客户端验证用)

三条学习路线

快速上手(已经会别的框架,想一天入门):01 → 02 → 03 → 08,之后需要什么查什么。

后端全流程(要接数据库做真实业务):01 → 06 顺读,重点吃透 04 会话与 06 表达式,07 章 Alembic 跟着跑一遍迁移链。

打磨生产件(服务要上线了):09 → 14 顺读。异常出口、响应信封、认证、测试、日志、流式,这一段是「能用」和「敢上线」的差距所在。

demo 的约定

  • 每章 demo/ 下一个或几个独立 .py 文件,单文件自足,不依赖其他章
  • 起服务的 demo 都是 uvicorn.run(app) 内嵌,直接 uv run demo/xxx.py,浏览器或 curl 按文件头注释里的地址验证
  • 数据库类 demo 用内存/文件 SQLite,跑完自动清理,重复运行不报错
  • 涉及 HTTP 的 demo 文件头都写好了 curl 验证清单,照着敲一遍比看十遍强

准备好了就从 01 · FastAPI 入门与 ASGI 开始。

章节清单

01FastAPI 入门与 ASGI本系列是一本「轻量用法手册」:每章只认识 FastAPI 生态里的一个零件,讲清楚它是什么、怎么装、怎么跑、文档去哪看,不搭建贯穿全课程的大工程。示例数据统一来自虚构的内容平台「墨集 inkhub」——栏目、文章、作者…22 分钟 · 13 个代码示例02路由与请求响应本章是 FastAPI 的「点单系统」说明书:URL 怎么进来、数据怎么接住、结果怎么发回去。学完你能独立写出一套带文档、带校验的 CRUD 接口。 示例场景统一为墨集 inkhub 内容平台——一个管理「栏目、文章…28 分钟 · 24 个代码示例03Pydantic 数据校验与配置本章定位:把 Pydantic v2 的常用"零件"一个个拆开讲——怎么定义模型、怎么加约束、怎么写自定义校验、怎么导出数据、怎么读配置、怎么组织 DTO。不搞贯穿工程,目标是学完之后,任何 FastAPI 项目 sch…28 分钟 · 23 个代码示例04SQLAlchemy 异步引擎与会话FastAPI 是异步框架,数据库这一层自然也得「异步到底」。本章搞定两件事:30 分钟 · 25 个代码示例05ORM 建模本章你将学会 - 用 DeclarativeBase + Mapped + mappedcolumn 三件套声明模型 - 主键 / 自增 / 可空 / 默认值 / 唯一 / 索引的每一种写法 - 外键 Forei…45 分钟 · 34 个代码示例06SQL 表达式与数据操作本章你将学会 - select() 骨架与链式拼装:where / orderby / limit / offset - 比较运算符全家桶:== 的真面目、like vs ilike、in、is(None) - …41 分钟 · 29 个代码示例07Alembic 数据迁移本章你将学会 - 说清 createall 的三个硬伤:只建不改、不记版本、多环境不同步 - alembic init 生成的四大件各管什么:alembic.ini / env.py / script.py.mak…34 分钟 · 28 个代码示例08依赖注入第 04 章结尾留了个钩子:getdb 里那句 async with ... yield session——「yield 前借、yield 后还」,但当时没解释谁来调用它、谁把 session 塞进路由函数。这一章就把幕…32 分钟 · 23 个代码示例09统一异常处理前面你已经见过两种错误出口:02 章的 422 校验错误、路由函数里随手抛的 HTTPException。服务小的时候,各管各的没事;服务一大,错误出口就成了「八国联军」——有的接口回 {"detail": ...},有…36 分钟 · 18 个代码示例10中间件本章你将学会 - 听懂「横切关注点」「AOP」两个唬人的词,明白中间件到底在替你干什么活 - 中间件的标准模板:request → callnext → 返回,以及洋葱模型 - 两种写法的取舍:@app.midd…45 分钟 · 36 个代码示例11认证与 JWT10 章收尾时留了句话:中间件守住了「请求进门的必经之路」,下一关要在这条路上再设一道关卡——你是谁?你的令牌呢?这一章就把这道关卡立起来。 墨集 inkhub 要开放作者投稿了:作者注册账号、登录、领凭证、写文章…47 分钟 · 26 个代码示例12pytest 测试上一章给墨集 inkhub 的接口上了 JWT 的锁。锁是上好了,可新问题跟着来:改了点赞逻辑,「发布」会不会被顺手改坏?加了新栏目,「列表筛选」还认不认旧参数?靠人肉一遍遍点接口,点到第三天人就麻了——而且人会累、会漏…42 分钟 · 30 个代码示例13日志 loguru本章你将学会 - 为什么 print 不能当日志用(无级别、无时间、无上下文、不能关),标准 logging 又输在哪(配置繁琐、堆栈不直观) - loguru 核心用法:logger.add 装配 sink、级别…55 分钟 · 37 个代码示例14流式响应 SSE 与 WebSocket本章你将学会 - 为什么需要流式:大文件下载、慢生成任务、AI 逐字输出——一次性响应撑不住的三种场面 - StreamingResponse 全套用法:同步/异步生成器、mediatype、Content-Dis…46 分钟 · 31 个代码示例