如何在 FastAPI 中访问端点视图函数内的 APP 属性?

rag*_*ria 4 python rest python-3.x fastapi

这是我的项目结构:

\n
\xe2\x94\x82   .gitignore\n\xe2\x94\x82   README.md\n\xe2\x94\x82   requirements.txt\n\xe2\x94\x82   start.py\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80app\n\xe2\x94\x82   \xe2\x94\x82   main.py\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80apis\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80v1\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82   __init__.py\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80routes\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   evaluation_essentials.py\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   training_essentials.py\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80models\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82   request_response_models.py\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82   __init__.py\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

这是最外面的样子start.py

\n
\xe2\x94\x82   .gitignore\n\xe2\x94\x82   README.md\n\xe2\x94\x82   requirements.txt\n\xe2\x94\x82   start.py\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80app\n\xe2\x94\x82   \xe2\x94\x82   main.py\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80apis\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80v1\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82   __init__.py\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80routes\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   evaluation_essentials.py\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   training_essentials.py\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80models\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82   request_response_models.py\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82   __init__.py\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

并且,我的所有端点和视图函数都已在training_essentials.py和evaluation_essentials.py中创建\n例如,training_essentials.py如下所示:

\n
import uvicorn\n\nif __name__ == "__main__":\n\n    from fastapi import Depends, FastAPI\n    from app.apis.v1 import training_essentials, evaluation_essentials\n\n    app = FastAPI(\n        title="Some ML-API",\n        version="0.1",\n        description="API Contract for Some ML API",\n        extra=some_important_variable\n    )\n\n    app.include_router(training_essentials.router)\n    app.include_router(evaluation_essentials.router)\n\n    uvicorn.run(app, host="0.0.0.0", port=60096)\n\n
Run Code Online (Sandbox Code Playgroud)\n

如何访问端点中视图函数内的 APP 属性及其变量?

\n

JPG*_*JPG 13

您可以访问request.appas

from fastapi import Request


@router.post("something")
def some_view_function(request: Request):
    fast_api_app = request.app
    return {"something": "foo"}
Run Code Online (Sandbox Code Playgroud)