FastAPI可以同时注册多个路由器吗

KZi*_*vas 2 python fastapi

我在文档中发现路由器是这样注册的:

app.include_router(router1)
app.include_router(router2)
Run Code Online (Sandbox Code Playgroud)

但如果我只是想包含一个路由器列表(比如如果我有 100 个路由器,我必须重复这 100 次),这似乎不必要地冗长?有没有办法将它们传递到列表或其他东西中?谢谢!

小智 5

迭代一个序列routers

简单的for循环

您可以使用 for 循环来列出所需的路由器:

for router in router1, router2, router3:
    account.include_router(router)
Run Code Online (Sandbox Code Playgroud)

但是,您仍然需要以某种方式创建一个包含所有路由器的列表。

如果您想在 for 循环之外存储序列,建议使用元组而不是列表,以简化数据结构:

routers = router1, router2, router3

for router in routers:
    account.include_router(router)
Run Code Online (Sandbox Code Playgroud)

从模块中提取 fastapi.APIRouter 的函数

如果您有大量路由,则可以执行类似的操作,假设它们位于单个模块中,但您可以将其调整为多个模块:

def include_router_from_module(target, module):
    module_attributes = vars(module)
    
    for attribute in module_attributes.values():
        if isinstance(attribute, fastapi.APIRouter):
            target.include_router(attribute)

include_router_from_module(app, your_module)
Run Code Online (Sandbox Code Playgroud)