Files
dpb/backend
34047007@qq.com 86126ea16f checkpoint: 架构治理四件套——统一 async / 测试真 PG / Redis 降级可选 / DPB 扶正
- A1 业务层统一 async:gencode 表内省改 run_sync 异步(不再阻塞事件循环)、
  check_db 改 async_engine、dict_util 启动预热异步载入;psycopg 降为
  APScheduler SQLAlchemyJobStore 专用同步孤岛(注释标注)
- A2 测试真 PG 化:conftest 弃 SQLite + mock Redis,改连真实 PG16(dpb_test)+
  Redis(number_gen advisory lock 路径真被测);新增 docker/test-compose.yaml
  测试依赖栈(postgres:16:5433 + redis:7:6380);run_ci 前置探测 + 容器兜底,
  pytest -m pg 10 套正式 tc 全过(真实 PG16 + Redis)
- B1 Redis 启动不强依赖:redis_connect 失败降级启动,缓存类回源 DB、存储类
  (会话/AI 配置/调度)经 require_redis 守卫返回 503;真机 3 阶段降级测试
  PASS=11 FAIL=0(独立 Redis 6390 + 后端 8091,不动共享 dev 服务)
- C 扶正 DPB:后端横幅/日志(dpb.log)/README/pyproject/ai_factory agent 名、
  前端 package.json/署名注释/链接文案/deploy.sh/docker 注释全部去 fastapiadmin;
  grep backend/app + frontend/web/src 零残留
- 验证:全量回归 pass=72 fail=0
2026-08-07 09:06:19 +08:00
..

DPB 桃育种系统后端

基于 FastAPI 框架自研的桃树育种管理系统后端,为前端 Vue3 管理界面提供完整的 API 服务支持。

与仓库根文档的关系:项目总览、一键前后端启动、演示账号、Docker 部署、架构图与默认端口等请以 根目录 README.md 为准;本文档侧重 backend/ 目录结构、迁移命令与后端开发约定。

技术栈

技术 版本 说明
FastAPI 0.115.2 现代 Web 框架
SQLAlchemy 2.0.36 ORM 框架
Alembic 1.15.1 数据库迁移工具
Pydantic 2.x 数据验证与序列化
APScheduler 3.11.0 定时任务调度
Redis 5.2.1 缓存与会话存储
Uvicorn 0.30.6 ASGI 服务器
Python 3.12+ 运行环境

项目结构

backend/
├── app/                     # 项目核心代码
│   ├── alembic/             # 数据库迁移管理
│   ├── api/                 # API 接口模块
│   │   └── v1/              # API v1 版本
│   │       ├── module_system/   # 系统管理模块
│   │       ├── module_monitor/  # 系统监控模块
│   │       ├── module_ai/       # AI 功能模块
│   │       └── module_*/       # 其他业务模块
│   ├── common/              # 公共组件(常量、枚举、响应封装)
│   ├── config/              # 项目配置文件
│   ├── core/                # 核心模块(数据库、中间件、安全)
│   ├── module_task/         # 定时任务模块
│   ├── plugin/              # 插件模块(二开目录)
│   ├── scripts/             # 初始化脚本和数据
│   └── utils/               # 工具类(验证码、文件上传等)
├── env/                     # 环境配置文件
├── logs/                    # 日志输出目录
├── sql/                     # SQL 初始化脚本
├── static/                  # 静态资源文件
├── main.py                  # 项目启动入口
├── alembic.ini              # Alembic 迁移配置
├── requirements.txt         # Python 依赖包
└── pyproject.toml           # 项目配置(uv / ruff

模块分层

每个业务模块采用统一的分层结构:

module_*/
├── controller.py    # 控制器 - HTTP 请求处理
├── service.py       # 服务层 - 业务逻辑处理
├── crud.py          # 数据层 - 数据库操作
├── model.py         # ORM 模型 - 数据库表定义
├── schema.py        # Pydantic 模型 - 数据验证
└── param.py         # 参数模型 - 请求参数

分包理念:按业务竖切(module_bre 育种 / module_system 系统 / module_monitor 监控 / module_ai AI)而非按技术层次分包,每个业务模块内部再按 controller/service/crud/model/schema 分层。

快速开始

环境要求

  • Python: 3.12+
  • 数据库: PostgreSQL 16(连接串在 env/.env.dev;测试套件连独立测试库 dpb_test,同为真实 PostgreSQL16,见 run_ci.py
  • Redis: 与 .env.dev 中配置一致

第一次在本机跑起来

  1. 复制 env/.env.dev.exampleenv/.env.dev,填写数据库、Redis 等(先在 DB 中建好空库)。
  2. backend/ 目录下 安装依赖:推荐 uv sync;或 pip install -r requirements.txt
  3. 启动uv run main.py run --env=dev(或 python main.py run --env=dev)。首次启动会自动初始化数据库表与基础数据,一般无需先执行 upgrade。接口文档示例:http://127.0.0.1:8001/docs(端口见 .env.devSERVER_PORT)。

数据库迁移命令(模型变更时使用)

日常首次启动不必手动执行;当你修改了 ORM 模型并需用 Alembic 管理结构变更时再使用:

# 生成迁移文件(模型变更后)
python main.py revision --env=dev
# 应用迁移
python main.py upgrade --env=dev

# 使用 uv 时
uv run main.py revision --env=dev
uv run main.py upgrade --env=dev

安装依赖与启动服务

# 推荐使用 uv(与 pyproject.toml 一致)
uv sync
uv run main.py run --env=dev

# 或使用传统 pip / venv
python -m venv .venv
source .venv/bin/activate            # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python main.py run --env=dev

代码格式化(ruff

ruff check
ruff check --fix
ruff check --watch

# 使用 uv 时
uv run ruff check
uv run ruff check --fix
uv run ruff check --watch

后端约定(日期与序列化)

使用 Pydantic v2PostgreSQLasyncpg 时:ORM 写入需要 Python 原生日期时间,JSON 输出需要可序列化字符串。

  • 自定义 DateStr / TimeStr / DateTimeStrapp/core/validator.py)使用 PlainSerializer(..., when_used='json')
  • model_dump(mode='python') 供 ORM 使用原生类型;JSON / Redis 使用 model_dump(mode='json')
  • 统一 HTTP 响应见 app/common/response.py 中的 jsonable_encoder
  • 写入 Redis 时请使用 model_dump(mode='json') 再序列化

相关链接