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}

可以将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"}},
)

你可能感兴趣的:(python)