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 def create_user(user_data: UserCreate):
    # user_data 已经自动完成了类型校验和解析
    new_user = {"id": 99, **user_data.model_dump()}
    return new_user
请谨慎使用此类代码。

🔌 2. 在主应用中挂载路由 (main.py)
编写好子路由后,只需要在主入口文件中将其 include_router 进来即可:
python
from fastapi import FastAPI
import uvicorn
# 💡 引入刚才编写的路由模块
from routers.users import router as user_router 

app = FastAPI(title="我的 FastAPI 项目", version="2.0")

# 💡 将子路由注册到 FastAPI 实例中
app.include_router(user_router)

@app.get("/")
async def root():
    return {"message": "欢迎来到首页"}

if __name__ == "__main__":
    uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
请谨慎使用此类代码。
这段路由 Demo 是否满足你的构建需求?如果你接下来想把它和你之前的 SQLAlchemy 2.0 同步数据库连接(get_db) 拼接在一起,或者需要为路由添加 JWT Token 的统一鉴权拦截器,请告诉我,我来帮你扩写对应的核心片段。

posted on 2026-09-21 14:03  漫思  阅读(4)  评论(0)    收藏  举报

导航