fastapi 如何将代码模块化为多个文件并访问应用程序装饰器

etl*_*evs 1 python python-3.x fastapi

我想将我的 FastAPI 代码分发到多个文件中,以便团队清楚地了解,因此我尝试使用 APIRoute 代替装饰器,但这样我就无法在其他文件中使用 FastAPI 装饰器。可以说我有main.py这样的

... import statements

rts = [
    APIRoute("/{value}", methods=["get"], endpoint=read_item)
]

app = FastAPI(routes=rts)

uvicorn.run("main:app", host="0.0.0.0", port=80)
Run Code Online (Sandbox Code Playgroud)

read_item现在我已经在另一个名为read_item.py我在主文件中导入的文件中定义了方法。

def read_item(value: int | float = None):
    results = {"value": value}
    return results
Run Code Online (Sandbox Code Playgroud)

如果我开始在主文件中使用@app装饰器,它会变得太大。现在的问题是我无法访问文件@app.on_event中的应用程序装饰器read_items.py,因为应用程序是在main文件中声明的,并且方法需要在read_item文件中声明。FastAPI 有什么办法解决这个问题吗?

pss*_*Dev 5

FastAPI 中路由的模块化是使用 APIRouter 函数完成的。APIRouter 允许您创建可以组装到 FastAPI 应用程序中的单独的路由器实例。

以下是如何模块化路线的示例:

应用程序/路由器/user.py

from fastapi import APIRouter

router = APIRouter()

@router.get("/users/")
async def read_users():
    return [{"username": "Foo"}, {"username": "Bar"}]

@router.get("/users/me")
async def read_user_me():
    return {"username": "fakecurrentuser"}

@router.get("/users/{username}")
async def read_user(username: str):
    return {"username": username}
Run Code Online (Sandbox Code Playgroud)

主要.py

from fastapi import FastAPI
from app.routers import user

app = FastAPI()

app.include_router(user.router)
Run Code Online (Sandbox Code Playgroud)