在一个大型 FastAPI 应用中,为了保持代码的可维护性和结构清晰,通常将代码拆分为多个文件和模块。FastAPI 提供了一种方便的方式来组织代码,允许将路径操作、模型、依赖项等逻辑分布在多个文件中。

以下是一个示例,演示如何在 FastAPI 中创建一个更大的应用,包括多个文件:

1. 创建主应用文件(main.py):
# main.py
from fastapi import FastAPI
from routers import items

app = FastAPI()

# 包含路径操作的路由
app.include_router(items.router)

2. 创建 routers 目录并在其中添加路由文件(routers/items.py):
# routers/items.py
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from database import get_db
from models import Item

router = APIRouter()

@router.post("/items/")
async def create_item(item: Item, db: Session = Depends(get_db)):
    db.add(item)
    db.commit()
    db.refresh(item)
    return item

@router.get("/items/")
async def read_items(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
    items = db.query(Item).offset(skip).limit(limit).all()
    return items

3. 创建 database.py 文件,用于处理数据库连接和依赖项(database.py):
# database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

DATABASE_URL = "sqlite:///./test.db"

engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

4. 创建 models.py 文件,用于定义数据模型(models.py):
# models.py
from sqlalchemy import Column, Integer, String
from database import Base

class Item(Base):
    __tablename__ = "items"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    description = Column(String)

通过这种组织结构,代码更易于管理。每个文件负责一个特定的任务,例如主应用文件(main.py)用于创建 FastAPI 应用实例,路由文件(routers/items.py)用于定义路径操作,database.py 用于处理数据库连接,models.py 用于定义数据模型。

确保你的目录结构和文件名符合你的项目需要,并且路径和引用关系正确。在主应用文件中,使用 app.include_router 来引入其他路由文件。这样,你可以在不同的文件中组织代码,使其更具可读性和可维护性。


转载请注明出处:http://www.zyzy.cn/article/detail/7397/FastAPI