知行合一1 分钟阅读
FastAPI 项目中合理的文件结构
在 FastAPI 项目中,合理的文件结构和命名规范可以提高代码的可读性和可维护性。以下是一个常见的多文件管理结构和命名建议,适用于中大型项目:
1. 项目结构示例
my_fastapi_project/
├── app/
│ ├── __init__.py
│ ├── main.py # 应用入口
│ ├── core/ # 核心配置和工具
│ │ ├── __init__.py
│ │ ├── config.py # 配置文件
│ │ ├── security.py # 认证和授权逻辑
│ │ └── utils.py # 工具函数
│ ├── models/ # 数据库模型
│ │ ├── __init__.py
│ │ ├── user.py # 用户模型
│ │ └── item.py # 商品模型
│ ├── schemas/ # Pydantic 模型
│ │ ├── __init__.py
│ │ ├── user.py # 用户相关模型
│ │ └── item.py # 商品相关模型
│ ├── api/ # API 路由
│ │ ├── __init__.py
│ │ ├── v1/ # 版本化 API
│ │ │ ├── __init__.py
│ │ │ ├── users.py # 用户相关路由
│ │ │ └── items.py # 商品相关路由
│ │ └── health_check.py # 健康检查路由
│ ├── crud/ # 数据库操作
│ │ ├── __init__.py
│ │ ├── user.py # 用户相关操作
│ │ └── item.py # 商品相关操作
│ ├── dependencies.py # 依赖注入
│ ├── database.py # 数据库连接
│ └── exceptions.py # 自定义异常
├── tests/ # 测试代码
│ ├── __init__.py
│ ├── test_users.py # 用户相关测试
│ └── test_items.py # 商品相关测试
├── requirements.txt # 依赖文件
├── Dockerfile # Docker 配置
└── README.md # 项目说明2. 文件命名规范
核心文件
main.py: 应用入口文件,初始化 FastAPI 应用并加载路由。database.py: 数据库连接和配置(如 SQLAlchemy 的 SessionLocal)。dependencies.py: 依赖注入逻辑(如获取当前用户、数据库会话等)。exceptions.py: 自定义异常处理。核心模块 (core/)
config.py: 项目配置(如环境变量、数据库 URL 等)。security.py: 认证和授权逻辑(如 JWT、OAuth2 等)。utils.py: 工具函数(如日期处理、字符串处理等)。模型模块 (models/)
user.py: 用户相关的数据库模型。item.py: 商品相关的数据库模型。其他模型文件按功能命名,如
order.py、product.py 等。Pydantic 模型 (schemas/)
user.py: 用户相关的 Pydantic 模型(如 UserCreate、UserResponse)。item.py: 商品相关的 Pydantic 模型(如 ItemCreate、ItemResponse)。其他模型文件按功能命名,如
order.py、product.py 等。API 路由 (api/)
users.py: 用户相关的路由(如注册、登录、获取用户信息)。items.py: 商品相关的路由(如创建商品、获取商品列表)。health_check.py: 健康检查路由。其他路由文件按功能命名,如
orders.py、products.py 等。CRUD 操作 (crud/)
user.py: 用户相关的数据库操作(如创建用户、查询用户)。item.py: 商品相关的数据库操作(如创建商品、查询商品)。其他操作文件按功能命名,如
order.py、product.py 等。测试模块 (tests/)
test_users.py: 用户相关的测试用例。test_items.py: 商品相关的测试用例。其他测试文件按功能命名,如
test_orders.py、test_products.py 等。3. 命名建议
模块名: 使用小写字母和下划线(如
user.py、health_check.py)。类名: 使用大驼峰命名法(如
UserCreate、ItemResponse)。函数名: 使用小写字母和下划线(如
get_user_by_id、create_item)。变量名: 使用小写字母和下划线(如
current_user、db_session)。4. 示例代码
app/main.py
from fastapi import FastAPI
from app.api.v1 import users, items
app = FastAPI()
app.include_router(users.router)
app.include_router(items.router)app/api/v1/users.py
from fastapi import APIRouter, Depends
from app.schemas.user import UserCreate, UserResponse
from app.crud.user import create_user
from app.database import get_db
router = APIRouter()
@router.post("/users/", response_model=UserResponse)
def create_new_user(user: UserCreate, db=Depends(get_db)):
return create_user(db, user)app/schemas/user.py
from pydantic import BaseModel
class UserCreate(BaseModel):
username: str
email: str
password: str
class UserResponse(BaseModel):
id: int
username: str
email: strapp/crud/user.py
from app.models.user import User
from app.schemas.user import UserCreate
def create_user(db, user: UserCreate):
db_user = User(username=user.username, email=user.email, password=user.password)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_userapp/models/user.py
from sqlalchemy import Column, Integer, String
from app.database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True)
email = Column(String, unique=True)
password = Column(String)5. 总结
模块化: 按功能划分模块,如
models/、schemas/、api/ 等。命名清晰: 文件名和类名应直观反映其功能。
一致性: 保持命名风格一致,便于团队协作和维护。
通过合理的文件结构和命名规范,可以使 FastAPI 项目更易于扩展和维护。
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
读者评论
评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。
暂无评论,欢迎抢沙发。