以下是针对 FastAPI 的保姆级教程,包含核心概念、完整案例和关键注意事项,采用「基础 → 进阶 → 生产级」的三阶段教学法:
一、FastAPI介绍
FastAPI 是一个现代化的、高性能的 Python Web 框架,专门用于构建 APIs(应用程序编程接口)。以下是它的核心特性和定位:
FastAPI 的本质
-
类型优先的框架:基于 Python 类型提示(Type Hints)
-
异步支持:原生兼容
async/await
语法 -
自动文档生成:内置 OpenAPI(Swagger)和 JSON Schema 支持
-
高性能:媲美 NodeJS 和 Go 的速度(Starlette 底层)
优势
FastAPI 核心优势
-
性能卓越:基于 Starlette(异步)和 Pydantic(类型校验)
-
开发效率:自动生成 Swagger/Redoc 文档
-
类型安全:Python 类型注解驱动
-
异步支持:原生
async/await
支持
对比
特性 | FastAPI | Flask | Django |
---|---|---|---|
异步支持 | ✅ 原生 | ❌ 需扩展 | ❌ 需扩展 |
自动 API 文档 | ✅ 内置 | ❌ 需扩展 | ❌ 需扩展 |
开发速度 | ⚡️ 极快 | 🏎️ 快 | 🐢 中等 |
学习曲线 | 📈 中等 | 📉 低 | 📈 高 |
性能 | 🚀 最高 | 🏎️ 中等 | 🚗 中等 |
核心组件架构
典型应用场景
-
微服务架构:轻量级 API 服务
-
数据科学接口:机器学习模型部署
-
实时应用:WebSocket 支持
-
快速原型开发:即时 API 文档
二、环境准备
# 创建虚拟环境(Python≥3.8)
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows# 安装依赖
pip install "fastapi[all]" uvicorn
三、基础案例:用户管理系统
1. 项目结构
user_api/
├── main.py # 主应用
├── models.py # Pydantic 模型
└── database.py # 模拟数据库
2. 模型定义 (models.py
)
from pydantic import BaseModel, EmailStrclass UserBase(BaseModel):email: EmailStrclass UserCreate(UserBase):password: strclass User(UserBase):id: intis_active: boolclass Config:from_attributes = True # 替换原来的 orm_mode
3. 数据库模拟 (database.py
)
from typing import Dict
fake_db: Dict[int, User] = {}class UserCRUD:@staticmethoddef create(user: UserCreate) -> User:user_id = len(fake_db) + 1db_user = User(id=user_id, email=user.email, is_active=True)fake_db[user_id] = db_userreturn db_user
4. 主应用 (main.py
)
from fastapi import FastAPI, HTTPException
from models import User, UserCreate
from database import UserCRUDapp = FastAPI()@app.post("/users/", response_model=User)
async def create_user(user: UserCreate):return UserCRUD.create(user)@app.get("/users/{user_id}", response_model=User)
async def read_user(user_id: int):if user_id not in fake_db:raise HTTPException(status_code=404, detail="User not found")return fake_db[user_id]
5. 启动与测试
uvicorn main:app --reload
-
访问
http://127.0.0.1:8000/docs
查看交互文档 -
测试请求:
curl -X POST "http://127.0.0.1:8000/users/" \ -H "Content-Type: application/json" \ -d '{"email":"user@example.com","password":"secret"}'
-
注意:若项目结构非上述结构,启动需进入到对应文件目录执行。如图:
四、进阶功能
1. 依赖注入
from fastapi import Dependsdef get_db():db = fake_db # 模拟数据库连接try:yield dbfinally:pass # 实际场景关闭连接@app.get("/items/") async def read_items(db: dict = Depends(get_db)):return db
2. 异步数据库
from sqlalchemy.ext.asyncio import AsyncSession@app.post("/async-users/") async def create_async_user(user: UserCreate, db: AsyncSession = Depends(get_async_db) ):# 使用 asyncpg 或 aiomysql 等pass
3. 中间件
from fastapi import Request@app.middleware("http") async def add_process_time_header(request: Request, call_next):start_time = time.time()response = await call_next(request)response.headers["X-Process-Time"] = str(time.time() - start_time)return response
五、生产级注意事项
1. 安全加固
from fastapi.security import OAuth2PasswordBeareroauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")@app.get("/secure/") async def secure_endpoint(token: str = Depends(oauth2_scheme)):return {"token": token}
2. 配置管理
from pydantic_settings import BaseSettingsclass Settings(BaseSettings):app_name: str = "User API"admin_email: stritems_per_page: int = 50class Config:env_file = ".env"
3. 日志监控
import logging from fastapi.logger import loggerlogging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__)
六、性能优化技巧
-
路由注册顺序:高频路由放前面
-
响应模型优化:
@app.get("/users/", response_model=List[User]) async def read_users(limit: int = 100): # 分页限制return list(fake_db.values())[:limit]
-
静态文件缓存:
from fastapi.staticfiles import StaticFiles app.mount("/static", StaticFiles(directory="static"), name="static")
七、常见错误解决方案
错误类型 解决方法 422 Validation Error
检查请求体是否符合 Pydantic 模型 ImportError: cannot import name 'UploadFile'
升级 fastapi 版本 异步函数忘记加 await
使用 @router.get()
替代@app.get()
时需注意八、完整项目示例
推荐学习官方示例库:
git clone https://github.com/tiangolo/fastapi-examples
通过这个教程,您已经掌握了从开发到部署 FastAPI 的全流程。建议下一步:
-
集成 Redis 缓存
-
学习 APIFlask 比较异同
-
研究 OpenAPI 扩展规范
九、学习路径建议
-
初级阶段:掌握路由、Pydantic 模型
-
中级阶段:依赖注入、中间件
-
高级阶段:自定义 APIRoute、背景任务
-
专家阶段:ASGI 生命周期钩子、测试策略
FastAPI 的官方文档(https://fastapi.tiangolo.com)提供了最权威的指南,推荐结合实践项目逐步深入。对于已有 Flask/Django 经验的开发者,通常可在 2-3 天内完成转型。