fastapi的路由demo 片段
这里为你提供一份包含 2026 年现代 FastAPI 开发中最核心、最常用场景的路由(Router)代码片段。
为了保持项目整洁,推荐使用
APIRouter 进行路由分组,而不是把所有接口都堆在 main.py 里。📂 1. 创建子路由模块 (
routers/users.py)这个片段展示了路径参数、查询参数、Body 请求体(Pydantic 校验)、依赖注入以及响应模型映射的现代规范写法。
python
from fastapi import APIRouter, Depends, HTTPException, status, Query
from typing import Annotated
from pydantic import BaseModel, Field
# 💡 1. 声明 APIRouter,并统一为该模块下的所有路由添加前缀和标签(用于 Swagger UI 分组)
router = APIRouter(
prefix="/users",
tags=["用户管理"]
)
# 2. 定义 Pydantic 模型(用于输入校验和输出序列化)
class UserCreate(BaseModel):
username: str = Field(..., min_length=2, max_length=20, description="用户名")
age: int = Field(..., gt=0, lt=150, description="年龄")
class UserResponse(BaseModel):
id: int
username: str
age: int
# 3. 模拟一个依赖项(例如获取数据库 Session,这里用虚假数据替代)
def get_mock_db():
return {"connection": "active"}
# 🚀 场景 A: GET 请求 + 路径参数 + 响应模型过滤
@router.get("/{user_id}", response_model=UserResponse, summary="获取单个用户详情")
async def get_user_by_id(user_id: int):
if user_id != 1:
raise HTTPException(status_code=404, detail="用户不存在")
return {"id": 1, "username": "maliang", "age": 18, "password_hash": "secret_abc"} # password_hash 会被 response_model 自动过滤掉
# 🚀 场景 B: GET 请求 + 查询参数(带分页和校验)
@router.get("/", response_model=list[UserResponse], summary="分页获取用户列表")
async def list_users(
page: Annotated[int, Query(gt=0, description="页码")] = 1,
size: Annotated[int, Query(le=100, description="每页条数")] = 10,
db: dict = Depends(get_mock_db) # 依赖注入
):
return [{"id": 1, "username": "maliang", "age": 18}]
# 🚀 场景 C: POST 请求 + Body 请求体数据校验 + 自定义状态码
@router.post("/", response_model=UserResponse, status_code=status.HTTP_201_CREATED, summary="创建新用户")
async