7.9 KiB
7.9 KiB
FastAPI 学习资源集合
欢迎!这个目录包含了学习 FastAPI 的完整资源,特别适合从 Flask 迁移到 FastAPI 的开发者。
📚 文档列表
1. FastAPI 学习文档 📖
推荐首先阅读
全面的 FastAPI 学习指南,包括:
- FastAPI 简介和特点
- Flask vs FastAPI 详细对比
- FastAPI 核心概念详解
- 项目中的实际应用分析
- 学习路径建议
- 常见问题解答
适合:想要系统学习 FastAPI 的初学者
2. FastAPI 快速参考指南 ⚡
日常开发速查手册
快速查找常用功能的参考指南:
- 路由定义
- 请求和响应处理
- 数据验证
- 依赖注入
- 错误处理
- 异步编程
- 项目中的实际应用模式
适合:日常开发时快速查找语法和用法
3. Flask 到 FastAPI 迁移指南 🔄
迁移项目必读
详细的迁移指南,包括:
- 迁移概览和步骤
- 核心概念对比表
- 代码迁移示例
- 当前项目的迁移分析
- 常见迁移问题解答
- 迁移检查清单
适合:正在从 Flask 迁移到 FastAPI 的开发者
🎯 学习路径
阶段 1:基础入门(1-2 天)
-
阅读 FastAPI 学习文档
- 理解 FastAPI 的基本概念
- 了解 Flask vs FastAPI 的区别
- 理解项目中的 FastAPI 使用
-
运行项目
# 安装依赖 pip install -r requirements.txt # 运行项目 python main.py # 或 uvicorn main:app --reload -
访问 API 文档
- 启动后访问:http://localhost:5003/docs
- 查看自动生成的 Swagger UI 文档
- 尝试调用 API 端点
阶段 2:深入理解(2-3 天)
-
分析项目代码
- 阅读
main.py,理解应用初始化 - 阅读
app/module/下的业务模块 - 理解任务队列机制
- 阅读
-
- 理解迁移过程
- 对比 Flask 和 FastAPI 的写法
- 理解项目中的迁移实现
-
实践练习
- 添加新的 API 端点
- 添加数据验证
- 添加错误处理
阶段 3:熟练应用(3-5 天)
-
使用 快速参考指南
- 在日常开发中参考
- 尝试不同的 FastAPI 特性
- 优化现有代码
-
深入学习
- 学习异步编程
- 学习 Pydantic 高级特性
- 学习依赖注入系统
-
项目改进
- 重构代码使用 FastAPI 最佳实践
- 添加更多类型提示
- 优化性能
🚀 快速开始
1. 安装依赖
pip install fastapi uvicorn
2. 最小示例
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
3. 运行应用
uvicorn main:app --reload
4. 访问文档
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
📖 项目结构
fastapi_app/
├── main.py # FastAPI 应用入口
├── api.py # API 工具类
├── app/
│ ├── api.py # 简道云 API 封装
│ ├── config.py # 配置管理
│ ├── module/ # 业务模块
│ │ ├── F6_Plugin_module.py
│ │ ├── module.py
│ │ └── other_module.py
│ ├── tasks/ # 后台任务
│ └── utils/ # 工具函数
│ └── app_tools.py
├── requirements.txt # 依赖列表
│
├── FASTAPI_LEARNING.md # 📖 学习文档
├── FASTAPI_QUICK_REFERENCE.md # ⚡ 快速参考
└── FLASK_TO_FASTAPI_MIGRATION.md # 🔄 迁移指南
🔑 关键概念
1. 应用实例
from fastapi import FastAPI
app = FastAPI(title="简道云FastAPI服务")
2. 路由定义
@app.post("/webhook")
async def webhook(request: Request):
data = await request.json()
return JSONResponse(result)
3. 应用状态
# 启动时设置
app.state.logger = setup_global_logger(Config)
# 路由中使用
logger = app.state.logger
4. 生命周期事件
@app.on_event("startup")
def on_startup():
# 初始化代码
pass
💡 项目中的实际应用
1. 应用初始化
# main.py
app = FastAPI(title="简道云FastAPI服务")
@app.on_event("startup")
def on_startup():
app.state.app_tools = AppTools(Config)
app.state.logger = setup_global_logger(Config)
app.state.f6_module = F6Module()
2. 路由处理
@app.post("/webhook")
async def webhook(request: Request):
logger = app.state.logger
app_tools = app.state.app_tools
data = await request.json()
header = request.headers
# 处理逻辑
result = await anyio.to_thread.run_sync(response_queue.get)
return JSONResponse(result)
3. 任务队列
# 将任务放入队列
response_queue = app_tools.enqueue_task(handler, data)
# 在线程池中执行同步函数
result = await anyio.to_thread.run_sync(response_queue.get)
📚 推荐资源
官方文档
- FastAPI 官方文档: https://fastapi.tiangolo.com/
- FastAPI 中文文档: https://fastapi.tiangolo.com/zh/
- Pydantic 文档: https://docs.pydantic.dev/
- Uvicorn 文档: https://www.uvicorn.org/
学习资源
- FastAPI 教程: https://fastapi.tiangolo.com/tutorial/
- Python 异步编程: https://docs.python.org/3/library/asyncio.html
- 类型提示: https://docs.python.org/3/library/typing.html
❓ 常见问题
Q: 我应该先读哪个文档?
A: 建议按以下顺序:
- 先读 FastAPI 学习文档 了解基础
- 再读 Flask 到 FastAPI 迁移指南 理解迁移
- 日常开发时参考 快速参考指南
Q: 如何理解项目中的异步代码?
A:
- FastAPI 使用
async/await处理异步操作 await request.json()异步获取 JSON 数据await anyio.to_thread.run_sync()在线程池中执行同步函数- 详细说明见 FastAPI 学习文档
Q: 项目中的任务队列是如何工作的?
A:
- 使用 Python 的
Queue和threading实现 - 请求到达后,任务放入队列
- 后台线程处理任务
- 使用
anyio.to_thread.run_sync()等待结果 - 详细说明见 FastAPI 学习文档
Q: 如何添加新的 API 端点?
A:
- 在
main.py中添加路由函数 - 在
get_action_map()中注册操作(如果需要) - 参考 快速参考指南
🎓 学习检查清单
基础理解
- 理解 FastAPI 的基本概念
- 理解 Flask vs FastAPI 的区别
- 能够创建简单的路由
- 理解异步编程(async/await)
项目理解
- 理解项目结构
- 理解应用初始化流程
- 理解路由处理逻辑
- 理解任务队列机制
实践能力
- 能够添加新的路由
- 能够使用 Pydantic 进行数据验证
- 能够处理错误
- 能够使用应用状态
深入学习
- 理解依赖注入
- 理解中间件
- 理解生命周期事件
- 能够优化代码性能
📝 更新日志
- 2024-01-XX: 创建 FastAPI 学习文档集合
- 添加 FastAPI 学习文档
- 添加快速参考指南
- 添加 Flask 到 FastAPI 迁移指南
🤝 贡献
如果你发现文档中有错误或需要改进的地方,欢迎提出建议!
祝你学习愉快! 🎉
如有问题,请参考相应的文档或查看 FastAPI 官方文档。