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

本文介绍如何使用FastAPI进行应用构建,通过模块化设计实现代码的组织与复用。利用APIRouter组件,可以创建类似Flask蓝图的结构,使应用更易于管理和扩展。文章详细展示了如何在主文件中导入和注册子模块,以及如何设置依赖项和响应。

如果需要构建应用程序或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"}},
)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值