You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
5.4 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# FastApiAdmin - Backend
基于 FastAPI 框架构建的企业级后端架构,为前端 Vue3 管理系统提供完整的 API 服务支持。
> **与仓库根文档的关系**项目总览、一键前后端启动、演示账号、Docker 部署、架构图与默认端口等请以 [根目录 README.md](../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+ | 运行环境 |
## 项目结构
```txt
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
```
### 模块分层
每个业务模块采用统一的分层结构:
```txt
module_*/
├── controller.py # 控制器 - HTTP 请求处理
├── service.py # 服务层 - 业务逻辑处理
├── crud.py # 数据层 - 数据库操作
├── model.py # ORM 模型 - 数据库表定义
├── schema.py # Pydantic 模型 - 数据验证
└── param.py # 参数模型 - 请求参数
```
分包理念(按业务竖切 vs 按技术层次分包)详见 [项目概述](https://service.fastapiadmin.com/guide/overview)。
## 快速开始
### 环境要求
- **Python**: 3.12+
- **数据库**: MySQL 8.0+ / PostgreSQL 13+ / SQLite 3.x连接串在 `env/.env.dev`
- **Redis**: 与 `.env.dev` 中配置一致
### 第一次在本机跑起来
1. 复制 `env/.env.dev.example``env/.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.dev``SERVER_PORT`)。
### 数据库迁移命令(模型变更时使用)
日常**首次启动不必手动执行**;当你**修改了 ORM 模型**并需用 Alembic 管理结构变更时再使用:
```bash
# 生成迁移文件(模型变更后)
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
```
### 安装依赖与启动服务
```bash
# 推荐使用 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
```bash
ruff check
ruff check --fix
ruff check --watch
# 使用 uv 时
uv run ruff check
uv run ruff check --fix
uv run ruff check --watch
# 生成开源授权函 JSON 文件
#uv run --with pip-licenses pip-licenses --format=json \
> app/api/v1/module_platform/invoice/oss_licenses.json
```
## 后端约定(日期与序列化)
使用 **Pydantic v2****PostgreSQLasyncpg**ORM 写入需要 Python 原生日期时间JSON 输出需要可序列化字符串。
- 自定义 `DateStr` / `TimeStr` / `DateTimeStr``app/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')`** 再序列化
## 相关链接
- **FastAPI 官方文档**: [https://fastapi.tiangolo.com/](https://fastapi.tiangolo.com/)
- **SQLAlchemy 文档**: [https://docs.sqlalchemy.org/](https://docs.sqlalchemy.org/)
- **Pydantic 文档**: [https://pydantic-docs.helpmanual.io/](https://pydantic-docs.helpmanual.io/)