Python FastAPI:如何访问依赖项中的APIRoute对象

Python FastAPI:如何访问依赖项中的APIRoute对象,python,fastapi,starlette,Python,Fastapi,Starlette,我正在使用FastAPI,其中主应用程序正在使用include\u router向FastAPI应用程序添加额外的路由 我想在所有路由上添加一个通用验证。 我在文档中发现,当包含路由器时,可以通过使用依赖项来实现这一点 这是可行的,并由所有http请求执行。 到目前为止一切都很好 现在,我想知道在这个通用验证函数中(在所有路由中使用Depends()注入)调用该函数的路由是什么 我找到了一种访问实际请求的方法(使用fastapi.routing.request作为函数的输入参数)但我想访问函数

我正在使用FastAPI,其中主应用程序正在使用
include\u router
向FastAPI应用程序添加额外的路由

我想在所有路由上添加一个通用验证。 我在文档中发现,当包含路由器时,可以通过使用依赖项来实现这一点

这是可行的,并由所有http请求执行。 到目前为止一切都很好

现在,我想知道在这个通用验证函数中(在所有路由中使用Depends()注入)调用该函数的路由是什么

我找到了一种访问实际请求的方法(使用fastapi.routing.request作为函数的输入参数)但我想访问函数或APIRoute本身的名称

from fastapi import FastAPI, Depends
from fastapi.routing import Request, APIRoute

async def check_permission(req: Request, route: APIRoute):
    print("test me")

app = FastAPI()
app.include_router(admin.service_api, dependencies=[Depends(check_permission)])

运行时错误:找不到的验证程序

也许这是一个坏主意,我应该用另一种方式来做吗? 非常感谢所有建议。
谢谢。

实际上使用请求对象是最佳实践,因为它保存了请求的全部数据,我看不出不使用它的理由

即使您为此错误创建了解决方法,也无法以正确的方式完成此工作。因为APIRoute不是有效的Pydantic字段类型,所以我们的FastAPI应该为此引发FastAPIError


因此答案是:您应该使用请求对象。

我想我找到了一个解决方法(通过使用请求对象)。 也许它不是很像蟒蛇:

async def check_权限(请求:请求):
f=要求范围['endpoint']
#f是fast api路由端点的函数对象

您能在问题中添加一些代码吗?帮助rn有点困难。好主意。我把它加到原来的问题上。谢谢。为什么需要函数名或路由名?为什么不使用
request.url
?主要原因是我想根据记录的操作创建内部逻辑(请参阅中的operationId)。这比在URL上使用字符串函数更明确。请求对象似乎没有一个单独的属性,我可以在不改变它的情况下对其进行解释。然后还有一个更好的方法!对不起,我看不出这能解决我的问题。操作id是APIRoute对象的属性,在依赖项对象中我无权访问该对象。