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

如何为FastAPI的APIRouter所有路由注入依赖返回值?

在FastAPI中通过APIRouter全局注入带返回值的依赖

你当前的写法无法将Permissions实例注入到路由函数中,因为APIRouter的dependencies参数仅会执行依赖函数,但不会自动将其返回值绑定到路由的参数上。要实现全局注入并让所有路由能获取到Permissions实例,有两种简洁的方案:

方案一:利用Request.state存储依赖实例

这种方式不需要修改路由函数的参数声明逻辑,只需在依赖函数中将实例存入请求状态,再在路由中读取:

from fastapi import APIRouter, Depends, Request

class Permissions:
    def __init__(self, user_id: int):
        self.user_id = user_id
        # 这里可以添加权限初始化逻辑

def get_permissions(request: Request):
    # 模拟生成Permissions实例,实际场景可从认证信息、数据库等获取
    permissions = Permissions(user_id=123)
    request.state.permissions = permissions
    return permissions

# 全局添加依赖到APIRouter
my_module = APIRouter(prefix="/abc", dependencies=[Depends(get_permissions)])

@my_module.get('/')
def route_1(request: Request):
    # 从请求状态中取出Permissions实例
    permissions = request.state.permissions
    return {"current_user_id": permissions.user_id}

@my_module.get('/a')
def route_2(request: Request):
    permissions = request.state.permissions
    return {"current_user_permissions": permissions.user_id}

方案二:自定义路由装饰器自动注入依赖

如果希望保持路由函数参数的清晰性,可以自定义装饰器,自动为每个路由添加Permissions依赖:

from fastapi import APIRouter, Depends

class Permissions:
    def __init__(self, user_id: int):
        self.user_id = user_id

def get_permissions():
    return Permissions(user_id=123)

my_module = APIRouter(prefix="/abc")

# 自定义装饰器,自动注入Permissions依赖
def inject_permissions(func):
    def wrapper(permissions: Permissions = Depends(get_permissions), *args, **kwargs):
        return func(permissions, *args, **kwargs)
    return wrapper

@my_module.get('/')
@inject_permissions
def route_1(permissions: Permissions):
    return {"user_id": permissions.user_id}

@my_module.get('/a')
@inject_permissions
def route_2(permissions: Permissions):
    return {"user_id": permissions.user_id}

关键说明

APIRouter的dependencies参数设计初衷是执行全局前置逻辑(如认证校验、请求参数预处理),而非传递实例给路由函数。上述两种方案分别通过请求状态存储、装饰器自动注入的方式,实现了你想要的全局依赖注入效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:15:37