1. FastAPI 极简教程概述
FastAPI作为Python生态中新兴的Web框架,凭借其出色的性能表现和开发者友好特性,正在快速成为构建API服务的首选工具。这个教程将从零开始,带你完整掌握FastAPI的核心用法,最终实现生产级部署的全套技能。
我最初接触FastAPI是在2019年,当时正在为一个物联网平台选型后端框架。经过对比Flask、Django等传统选项后,FastAPI的异步支持、自动文档生成等特性最终打动了我。几年实战下来,这个框架确实没有让人失望 - 我们的API响应时间平均降低了40%,开发效率提升了近一倍。
本教程特别适合以下人群:
- 需要快速构建RESTful API的Python开发者
- 从Flask/Django转型过来的Web开发人员
- 对API性能有较高要求的系统架构师
- 希望简化前后端协作流程的全栈工程师
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 开发环境搭建
推荐使用Python 3.8+版本以获得最佳兼容性。我个人习惯使用pyenv管理多版本Python环境:
bash复制# 安装pyenv(MacOS)
brew install pyenv
# 安装指定Python版本
pyenv install 3.10.6
# 创建虚拟环境
python -m venv fastapi-env
source fastapi-env/bin/activate
注意:Windows用户可以使用WSL2获得接近Linux的开发体验,这对后续部署环节尤为重要
2.2 依赖安装
除了fastapi本体,还需要安装uvicorn作为ASGI服务器:
bash复制pip install fastapi uvicorn
生产环境建议固定版本:
bash复制pip install fastapi==0.95.2 uvicorn==0.22.0
典型的生产级依赖栈还包括:
- python-multipart:表单数据处理
- python-jose:JWT认证
- passlib:密码哈希
- aiosqlite:异步数据库驱动
3. 核心功能开发实战
3.1 第一个API端点
创建main.py文件:
python复制from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
启动开发服务器:
bash复制uvicorn main:app --reload
访问http://localhost:8000即可看到返回的JSON响应。--reload参数启用热重载,这在开发阶段非常实用。
3.2 请求参数处理
FastAPI支持多种参数声明方式:
python复制from fastapi import Path, Query
@app.get("/items/{item_id}")
async def read_item(
item_id: int = Path(..., title="商品ID"),
q: str = Query(None, alias="query"),
size: float = Query(1.0, gt=0)
):
return {"item_id": item_id, "q": q, "size": size}
参数验证特性包括:
- 类型转换(自动将字符串转为int/float)
- 值范围限制(gt/lt等)
- 别名支持
- 文档自动生成
3.3 Pydantic模型验证
定义数据模型是生产级API的关键:
python复制from pydantic import BaseModel, EmailStr
class UserCreate(BaseModel):
username: str
email: EmailStr
password: str
age: int = Field(gt=18, description="必须年满18岁")
@app.post("/users/")
async def create_user(user: UserCreate):
# 数据自动验证
return {"username": user.username}
Pydantic提供的验证能力:
- 字段类型检查
- 自定义验证器
- 嵌套模型
- JSON Schema生成
4. 高级功能实现
4.1 异步数据库访问
推荐使用SQLAlchemy 2.0+的异步API:
python复制from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "sqlite+aiosqlite:///./test.db"
engine = create_async_engine(DATABASE_URL)
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession)
@app.get("/users/{user_id}")
async def get_user(user_id: int):
async with AsyncSessionLocal() as session:
result = await session.execute(select(User).where(User.id == user_id))
user = result.scalars().first()
return user
经验:异步数据库操作需要特别注意连接管理,建议使用依赖注入系统
4.2 认证与授权
JWT认证实现示例:
pyth复制
