You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改FastAPI include_router描述及fastapi-users默认路由行为?

无需修改fastapi-users源码,修改标准路由行为的方案

当然可以在不修改插件源码的前提下,修改fastapi-users生成的标准路由行为,以下是两种可行的实现方式:

方法一:提前修改路由对象属性

先获取fastapi-users生成的路由实例,遍历其内部的路由项,直接修改对应属性(比如description、tags、依赖项等),再将修改后的路由包含到你的APIRouter中。

示例代码:

from fastapi import Depends
from sqlalchemy import select
from fastapi import APIRouter, FastAPI
from app.schemas.schemas import UserRead
from app.routes.permissions import admin_route
from sqlalchemy.ext.asyncio import AsyncSession
from app.schemas.schemas import UserCreate, UserUpdate
from app.models.users import auth_backend, fastapi_users
from app.databases.user import User, get_async_session

test = APIRouter()

# 获取fastapi-users生成的用户路由实例
users_router = fastapi_users.get_users_router(UserRead, UserUpdate)

# 遍历路由项,针对性修改属性
for route in users_router.routes:
    # 根据路由路径匹配修改描述
    if route.path.endswith("/me"):
        route.description = "获取当前登录用户的详细信息"
    elif route.path.endswith("/{id}"):
        route.description = "根据用户ID查询指定用户的信息"
    # 统一添加标签前缀(可选)
    route.tags = ["user-management"]
    # 给所有用户路由添加权限依赖(可选)
    route.dependencies.append(Depends(admin_route))

# 将修改后的路由包含到自定义APIRouter中
test.include_router(
    users_router,
    prefix="/users",
    tags=["stuff"],
)


@test.get("/users", response_model=list[UserRead], tags=["stuff"], description="获取系统所有用户列表")
async def get_all_users(session: AsyncSession = Depends(get_async_session)):
    statement = select(User)
    result = await session.execute(statement)
    return result.scalars().all()

app = FastAPI()
app.include_router(test)

方法二:通过启动事件批量修改

利用FastAPI的startup事件钩子,在应用启动完成后遍历所有路由,筛选出fastapi-users生成的路由并修改其属性。

示例代码:

from fastapi import FastAPI, Depends
from app.models.users import fastapi_users
from app.schemas.schemas import UserRead, UserUpdate
from app.routes.permissions import admin_route

test = APIRouter()
users_router = fastapi_users.get_users_router(UserRead, UserUpdate)
test.include_router(users_router, prefix="/users", tags=["stuff"])

app = FastAPI()
app.include_router(test)

@app.on_event("startup")
def adjust_users_routes():
    # 遍历所有已注册的路由
    for route in app.routes:
        # 筛选fastapi-users生成的路由(可通过路径前缀或路由名称判断)
        if route.path.startswith("/users") and "users_" in route.name:
            # 修改描述
            route.description = f"用户管理接口:{route.description or '无描述'}"
            # 添加权限校验依赖
            route.dependencies.append(Depends(admin_route))

原理说明

fastapi-users生成的APIRouter和FastAPI原生的路由实例结构完全一致,其内部的routes列表包含了所有具体的路由项(Route对象)。每个Route对象公开了description、tags、dependencies、response_model等可修改的属性,直接调整这些属性就能实现对路由行为的自定义,无需触碰插件源码。

内容的提问来源于stack exchange,提问作者Ano Nymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:25:29