FastAPI项目应结构清晰、启动快、易扩展:main.py仅作入口和路由注册;api/按版本和功能拆分路由;schemas/与models/分离校验与ORM模型;config.py和deps.py统一管理配置与依赖。

用 FastAPI 搭建简单 Web 应用,关键不是堆功能,而是结构清晰、启动快、后续好扩展。下面直接说一个够用又不臃肿的项目结构,适合个人小项目或快速验证想法。
核心文件:main.py 是入口
整个应用从这里启动,只放路由注册和应用实例创建,不写业务逻辑。
- 用 FastAPI() 创建 app 实例
- 用 @app.get("/") 这类装饰器挂接口,但只做转发(比如调用
api/v1/items.py里的函数) - 加一句 uvicorn.run("main:app", reload=True) 方便本地调试
按模块拆路由:api/ 目录分版本和功能
把接口按业务或资源归类,避免所有路由挤在 main.py 里。
- 例如:
api/v1/items.py处理商品相关接口,api/v1/users.py处理用户相关 - 每个文件里用 APIRouter() 定义子路由,再在 main.py 中 include 进来
- 路径自动带前缀,比如
router = APIRouter(prefix="/items"),那么@router.get("/list")对应的就是/v1/items/list
数据模型和校验:schemas/ 和 models/ 分开
FastAPI 靠 Pydantic 做请求/响应校验,建议把定义收在 schemas/;如果用 ORM(如 SQLAlchemy),实体类放 models/。
立即学习“Python免费学习笔记(深入)”;
-
schemas/item.py:定义输入(ItemCreate)、输出(ItemOut)、更新(ItemUpdate)等 Pydantic 模型 -
models/item.py:对应数据库表的 ORM 类(字段可和 schema 不完全一致,比如加 id、created_at) - 接口函数里接收 schema 类型参数,内部转成 model 存库,返回时再转回 schema —— 清晰隔离关注点
配置和依赖:config.py + deps.py 统一管理
数据库连接、密钥、环境变量这些别散落在各处。
-
config.py:用 pydantic.BaseSettings 读取 .env 或环境变量,统一提供配置对象 -
deps.py:放 Depends() 用的函数,比如 get_db() 获取数据库会话,get_current_user() 做认证 - 接口里直接写 db: Session = Depends(get_db),不用每次手动初始化
基本上就这些。不需要一上来就上 Docker、Celery、RBAC —— 先跑通 /hello,再加 /items,再连数据库,结构自然就长出来了。










