首页 > 其他分享 >APIRouter of FASTAPI

APIRouter of FASTAPI

时间:2022-09-05 16:36:23浏览次数:41  
标签:APIRouter get fastapi app router FASTAPI import

ROUTER OF APP

https://fastapi.tiangolo.com/tutorial/first-steps/

如果应用比较简单,可以把所有的路径定义在app上。

如果应用非常庞大,有很多的逻辑,按照业务分为产生数十以上的路径,则需要用模块的方式拆分应用

路径也需要对应拆分,不能把所有的路径挂在app上。

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

 

APIRouter

https://fastapi.tiangolo.com/tutorial/bigger-applications/?h=apirouter#an-example-file-structure

对于模块内部使用APIRouter挂载路径

from fastapi import APIRouter

router = APIRouter()


@router.get("/users/", tags=["users"])
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]


@router.get("/users/me", tags=["users"])
async def read_user_me():
    return {"username": "fakecurrentuser"}


@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
    return {"username": username}

 

然后使用app的include_router方法,把模块定义的router挂在到app上

from fastapi import Depends, FastAPI

from .dependencies import get_query_token, get_token_header
from .internal import admin
from .routers import items, users

app = FastAPI(dependencies=[Depends(get_query_token)])


app.include_router(users.router)
app.include_router(items.router)
app.include_router(
    admin.router,
    prefix="/admin",
    tags=["admin"],
    dependencies=[Depends(get_token_header)],
    responses={418: {"description": "I'm a teapot"}},
)


@app.get("/")
async def root():
    return {"message": "Hello Bigger Applications!"}

 

事实上APIRouter也有includ_router方法,挂载子router,实现路径的层级嵌套管理。

router.include_router(other_router)

 

应用实例

https://github.com/eightBEC/fastapi-ml-skeleton

子模块挂载路径

 

from fastapi import APIRouter

from fastapi_skeleton.api.routes import heartbeat, prediction

api_router = APIRouter()
api_router.include_router(heartbeat.router, tags=["health"], prefix="/health")
api_router.include_router(prediction.router, tags=[
                          "prediction"], prefix="/model")

 

应用挂载子模块路径

from fastapi import FastAPI

from fastapi_skeleton.api.routes.router import api_router
from fastapi_skeleton.core.config import (API_PREFIX, APP_NAME, APP_VERSION,
                                          IS_DEBUG)
from fastapi_skeleton.core.event_handlers import (start_app_handler,
                                                  stop_app_handler)


def get_app() -> FastAPI:
    fast_app = FastAPI(title=APP_NAME, version=APP_VERSION, debug=IS_DEBUG)
    fast_app.include_router(api_router, prefix=API_PREFIX)

    fast_app.add_event_handler("startup", start_app_handler(fast_app))
    fast_app.add_event_handler("shutdown", stop_app_handler(fast_app))

    return fast_app


app = get_app()

 

标签:APIRouter,get,fastapi,app,router,FASTAPI,import
From: https://www.cnblogs.com/lightsong/p/16658630.html

相关文章

  • [教程]:使用 FastAPI 和 Docker 提供容器化 ML 模型
    [教程]:使用FastAPI和Docker提供容器化ML模型使用FastAPI和docker提供容器化机器学习(ML)模型的分步教程。Ourtechstackforthetutorial在我的**以......
  • tiangolo/uvicorn-gunicorn:python3.8 fastapi docker部署
    经验教训:1、gunicornlog文件固定放置在容器中目录:/code/logs,所以这个目录必需映射出来;2、按照fastapi官方建议,uvicorn运行目录:/app,所以这个目录要映射到代码目录;3、......
  • FastApi项目部署到docker
    编写一个Dockerfile#指定构建的基础镜像来源FROMpython:3.9#作者信息[email protected]#设置工作区间WORKDIR/opt/code#设置环境变量......
  • FastApi学习
    vscode配置插件coderunner在setting.json中关于python的修改为,因为我使用了虚拟环境,得让vscode找到python的路径"code-runner.executorMap":{"python":"......
  • FastAPI+Gunicorn+Nginx部署(超详细)
    前言系统使用:Ubuntu22.04(用户名:ubuntu)Python版本:Python3.10(虚拟环境:fastapi_env)数据库:MySQL5.7本项目使用以下工具FastAPIGunicornuvicornNginx......