当前位置:   article > 正文

fastapi(二十)-大型项目文件结构_fastapi 项目结构

fastapi 项目结构

如果需要构建应用程序或api,很少将所有的内容都放入一个文件中。
fastapi提供了一个方便的工具可灵活的构建应用。(类似于flask的蓝图)
假如文件结构如下:
.
├── app
│ ├── init.py
│ ├── main.py
│ └── routers
│ ├── init.py
│ ├── items.py
│ └── users.py

  • 该app目录包含所有内容。
  • 该app目录有一个空文件app/init.py。
    • 因此,该app目录是“ Python包”(“ Python模块”的集合)。
  • 该app目录还有一个app/main.py文件。
    • 由于它位于Python软件包目录中(因为存在一个文件__init__.py),因此它是该软件包的“模块”:app.main。
  • 有一个子目录app/routers/。
  • 子目录app/routers也有一个空文件__init__.py。
    • 因此,它是一个“ Python子包”。
  • 该文件app/routers/items.py在旁边app/routers/init.py。
    • 因此,这是一个子模块:app.routers.items。
  • 该文件app/routers/users.py在旁边app/routers/init.py。
    • 因此,这是一个子模块:app.routers.users。
      APIRouter
from fastapi import APIRouter

router = APIRouter()


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


@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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

可以将APIRouter视为“迷你FastAPI”类。
支持所有相同的选项。
所有相同的参数,响应,依赖性,标签等。

然后在main文件中:

from fastapi import Depends, FastAPI, Header, HTTPException

from .routers import items, users

app = FastAPI()


async def get_token_header(x_token: str = Header(...)):
    if x_token != "fake-super-secret-token":
        raise HTTPException(status_code=400, detail="X-Token header invalid")


app.include_router(users.router)
app.include_router(
    items.router,
    prefix="/items",
    tags=["items"],
    dependencies=[Depends(get_token_header)],
    responses={404: {"description": "Not found"}},
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号