FastAPI 入门教程
FastAPI 是一个现代、高性能的 Python Web 框架,基于标准 Python 类型提示构建,自带交互式文档,性能接近 Node.js 和 Go。
官网:https://fastapi.tiangolo.com
1、安装与启动
fastapi[standard]会自动安装 Uvicorn 等常用依赖,建议用引号包裹确保终端兼容。
最小示例:
启动开发服务器:
启动后访问:
- http://127.0.0.1:8000 — API 响应
- http://127.0.0.1:8000/docs — Swagger UI 交互文档
- http://127.0.0.1:8000/redoc — ReDoc 备选文档
- http://127.0.0.1:8000/openapi.json — 原始 OpenAPI Schema
fastapi dev 默认开启热重载。生产环境使用 fastapi run。
2、路径参数(Path Parameters)
路径参数使用花括号 {} 声明,配合类型注解实现自动校验和类型转换:
- 访问
/items/3→item_id为int类型的3 - 访问
/items/foo→ 自动返回 422 错误,提示不是合法整数
枚举限定值
Swagger 文档会自动展示可选值下拉。
路由顺序
固定路径要写在路径参数前面,否则会被通配匹配:
3、查询参数(Query Parameters)
函数参数中不在路径里的声明,自动成为查询参数:
/items/5?q=fastapi→ 返回带q的结果/items/5→q为None,可选参数/items/5?short=true→ 布尔查询参数
布尔参数:值为
true、1、True等均为True,其他为False。
4、请求体(Request Body)
用 Pydantic 模型声明请求体,自动完成 JSON 解析、类型转换和校验:
发送请求体:
name和price必传description和tax可选(有默认值None)
同时使用路径参数、查询参数和请求体
FastAPI 会自动识别参数来源:
item_id→ 路径参数q→ 查询参数(str单值类型)item→ 请求体(Pydantic 模型)
5、响应模型(Response Model)
用 response_model 控制返回字段,自动过滤多余属性:
返回结果中不会包含 password 字段。
6、表单与文件上传
表单数据
文件上传
7、依赖注入(Dependency Injection)
依赖注入是 FastAPI 的核心特性,用于复用公共逻辑:
数据库连接依赖
认证依赖
8、异常处理
HTTPException
自定义异常处理器
9、中间件
10、跨域(CORS)
11、路由分组(APIRouter)
项目变大后,用 APIRouter 拆分路由:
12、静态文件挂载
13、异步支持
FastAPI 同时支持同步 def 和异步 async def:
async def→ 在事件循环中直接执行def→ 自动在线程池中运行,不会阻塞事件循环
14、生命周期事件(Lifespan)
推荐使用 lifespan 替代已废弃的 @app.on_event:
15、推荐项目结构
以下结构基于 FastAPI 官方全栈模板 和企业级实践整理,按职责清晰分层:
分层职责说明
关键设计原则
1. 路由不碰数据库
2. models 与 schemas 分离
3. API 版本化
4. 配置用环境变量,不要硬编码
pyproject.toml 配置入口
这样 fastapi dev 会自动找到 app 对象,无需每次指定文件路径。

