Files
information-sign-backend/README.md
chenpanliang 3a5cc50d02 feat: 初始化FastAPI项目基础框架
添加项目基础结构,包括:
- 核心模块(src/main.py)
- 路由模块(users/items)
- 数据库配置和模型
- 日志工具
- 测试用例
- 项目文档和依赖配置
2025-12-15 11:34:24 +08:00

171 lines
7.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FastAPI项目模板 及 快速开发范式
## 1\. 核心原则
* **简洁至上**:避免过度设计。优先选择简单直接的方案。
* **一致性**:团队成员遵循相同的规范,降低沟通和维护成本。
* **自动化**:利用工具自动完成格式化、检查等重复性工作。
-----
## 2\. 虚拟环境与依赖管理
**目标**:隔离项目依赖,保证环境一致性。
**规范**
* **工具**:使用 Python 内置的 `venv` 模块。
* **创建虚拟环境**:在项目根目录执行 `python -m venv venv``.gitignore` 文件应包含 `venv/` 目录。
* **激活环境**
* macOS/Linux: `source venv/bin/activate`
* Windows: `.\venv\Scripts\activate`
* **依赖管理**
* 使用 `pip``requirements.txt` 文件。
* **安装依赖**`pip install -r requirements.txt`
* **更新依赖文件**:完成开发或添加新包后,运行 `pip freeze > requirements.txt` 更新依赖列表。或手动修改依赖列表。
* **(可选) 开发依赖**:可以创建一个 `requirements-dev.txt` 文件,存放仅在开发时使用的工具(如 `pytest`, `black`),并将其 `include` 到主 `requirements.txt` 中或分开安装。
-----
## 3\. 项目结构
**目标**:清晰、模块化,便于快速定位代码。
推荐一个可扩展的结构:
```
your_project_name/
├── src/                      # 主要应用代码
  ├── __init__.py
  ├── main.py               # FastAPI 应用实例、全局配置、根路由
  ├── routers/              # 业务逻辑路由
   ├── __init__.py
   ├── users.py          # 用户相关的路由
   └── items.py          # 物品相关的路由
  ├── services/             # 业务逻辑层 (当业务复杂时,将复杂逻辑拆分到此处)
   ├── __init__.py
   ├── users.py
   └── items.py
  ├── models/               # 数据模型 (如 Pydantic 模型)
   ├── __init__.py
   └── user.py           # 用户数据模型
  ├── db/                   # 数据库相关配置与连接
   ├── __init__.py
   └── database.py
  └── utils/                # 常用工具函数
      ├── __init__.py
      └── tools.py
├── tests/                    # 测试代码
  ├── __init__.py
  └── test_users.py         # 用户模块的测试
├── .gitignore                # Git 忽略文件
├── README.md                 # 项目说明文档
├── requirements.txt          # 项目依赖列表
├── Dockerfile                # Docker 配置文件
├── .env.example              # 环境变量文件模板
└── .env                      # 环境变量文件 (不提交到Git)
```
**说明**:
* `main.py`: 只做最核心的初始化和包含各个 `router`
* `.env`: 存放环境变量,如数据库连接信息、密钥等。
* `.env.example`: 示例环境变量文件,用于创建 `.env` 文件。
* `Dockerfile`: Dockerfile 文件,用于构建镜像。
* `requirements.txt`: 项目依赖文件,用于安装依赖。
* `README.md`: 项目说明文档。
* `routers`: 路由模块,存放各个接口的实现。
* `models`: 模型模块,存放数据库模型定义。
* `utils`: 工具模块,存放工具函数。
-----
#### 4\. 命名规范
**目标**:遵循 PEP 8保持代码风格统一。
* **文件和目录**:使用小写蛇形命名法 (snake\_case),例如 `user_router.py`
* **变量和函数**:使用小写蛇形命名法,例如 `get_user_by_id`, `db_session`
* **类和 Pydantic 模型**:使用大驼峰命名法 (PascalCase),例如 `UserCreate`, `ItemSchema`
* **常量**:使用全大写蛇形命名法,例如 `DATABASE_URL`, `API_PREFIX`
* **FastAPI 路由函数**:建议以 `动作_资源` 的方式命名,例如 `read_users`, `create_item`
-----
#### 5\. 编码习惯与最佳实践
* **代码格式化**
* **强制使用 `black`**。`black` 是一个无妥协的代码格式化工具,能消除所有关于格式的争论。
* **使用 `isort`** 对 `import` 语句进行排序。
* 在 CI/CD 或 Git pre-commit hook 中加入自动格式化检查。
* **代码质量检查 (Linter)**
* 使用 `flake8` 或更现代的 `ruff` 进行代码风格和潜在错误的检查。
* **FastAPI 实践**
* **善用依赖注入 (`Depends`)**:将数据库会话、用户认证等逻辑通过 `Depends` 注入到路由函数中,实现逻辑复用和解耦。
* **当router逻辑繁重时考虑分离功能**如果路由逻辑过于复杂考虑将复杂逻辑提取到单独的函数中放置在service层并调用。
* **异步优先**:对于 I/O 密集型操作(如数据库查询、外部 API 请求),始终使用 `async def``await`
* **统一日志输出**:使用 uvcrion 的 `from uvicorn.server import logger` 来捕获特定异常,并返回统一格式的错误响应。例子:`logger.error(f"Error: {e}")`
* **配置管理**:使用 os.getenv("ENV_VAR_NAME", "default_value") 从配置文件和环境变量中加载配置。
* **类型提示 (Type Hinting)**
* **强制要求**:为所有函数参数和返回值添加类型提示。这是 FastAPI 的核心特性之一,能提供强大的编辑器支持和自动文档生成。
-----
#### 6\. 版本控制 (Git)
* **分支模型**
* `main` (或 `master`) 分支:用于部署的稳定版本。**只接受**来自 `develop` 的合并。
* `develop` 分支:用于集成各个功能开发的分支。
* `faet/xxx` 分支:从 `develop` 创建,用于开发新功能。开发完成后合并回 `develop`
* `fix/xxx` 分支:用于修复 `main` 分支上的紧急 bug。
* `dev/xxx` 分支:从 `develop` 创建,用于开发新功能。开发完成后合并回 `develop`
* **Commit Message**
* **约定格式**:推荐使用 "Conventional Commits" 规范。
* `feat: add new user registration endpoint` (新功能)
* `fix: correct password hashing algorithm` (修复 Bug)
* `docs: update README with setup instructions` (文档)
* `style: format code with black` (格式化)
* `refactor: restructure database session handling` (重构)
* `test: add tests for user creation` (测试)
* 这样做的好处是提交历史清晰,便于追溯和自动生成更新日志。
-----
#### 7\. 测试
* **框架**:使用 `pytest`
* **工具**:结合 FastAPI 的 `TestClient``HTTPX` 来发送模拟请求。
* **要求**:核心业务逻辑和重要的 API 端点必须有单元测试或集成测试覆盖。
* **数据库**:测试时应使用一个独立的测试数据库,并在每次测试前后清理数据。
-----
### 总结
这份范式旨在为小型 FastAPI 团队提供一个简单、易于上手的起点。最重要的不是规则本身,而是**团队达成共识并持续遵守**。随着项目和团队的发展,可以随时对这些规范进行调整和补充。
**工具链建议**:
* 虚拟环境: `venv`
* 依赖管理: `pip` + `requirements.txt`
* 代码格式化: `black`, `isort`
* 代码检查: `ruff` (推荐) 或 `flake8`
* 测试: `pytest`
* 版本控制: `Git`