Files
template/USAGE.md
2025-12-21 00:20:27 +08:00

291 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
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.
# 模板使用说明
## 模板特性
本模板基于aitsc项目的最佳实践抽取了以下核心特性
### ✅ 已实现的功能
1. **标准化项目结构**
- 清晰的目录组织src/、config/、tests/等)
- 模块化设计,易于扩展
2. **多环境配置管理**
- 支持development/production/testing/local四种环境
- 通过环境变量自动选择配置
- 配置继承机制,减少重复
3. **依赖分类管理**
- base.txt: 核心依赖
- development.txt: 开发工具
- production.txt: 生产服务器
- test.txt: 测试框架
4. **应用工厂模式**
- 灵活的Flask应用创建方式
- 支持测试和不同环境
5. **数据库迁移支持**
- 使用Flask-Migrate管理数据库版本
- 支持多数据库SQLite/MySQL/PostgreSQL
6. **环境变量管理**
- 使用python-dotenv加载.env文件
- 提供env.example模板
7. **完整的测试框架**
- pytest配置
- 测试fixtures
- 示例测试用例
8. **文档结构**
- API文档模板
- 开发文档模板
- 部署文档模板
9. **代码质量工具**
- flake8配置
- pytest配置
- 支持代码格式化Black、isort
10. **生产环境支持**
- Gunicorn配置
- 日志系统
- 错误处理
## 使用流程
### 1. 复制模板
```bash
cp -r template my_new_project
cd my_new_project
```
### 2. 运行初始化(推荐)
```bash
python scripts/init_project.py
```
脚本会自动:
- 生成SECRET_KEY
- 创建.env文件
- 创建必要目录
- 可选:重命名应用目录
### 3. 手动配置(如果未使用脚本)
```bash
# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# 或 .venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements/base.txt
pip install -r requirements/development.txt
# 配置环境变量
cp env.example .env
# 编辑.env文件至少设置SECRET_KEY和DATABASE_URL
```
### 4. 初始化数据库
```bash
flask db init
flask db migrate -m "Initial migration"
flask db upgrade
```
### 5. 运行项目
```bash
python run_dev.py
```
## 自定义项目
### 重命名应用
1. 重命名目录: `src/your_app` -> `src/my_app`
2. 更新导入路径:
- `run_dev.py`: `from src.your_app` -> `from src.my_app`
- `run_production.py`: 同上
- `gunicorn.conf.py`: `"src.your_app:create_app()"` -> `"src.my_app:create_app()"`
- `tests/conftest.py`: 同上
- 所有测试文件中的导入
### 添加新功能
#### 添加路由
1.`src/your_app/routes/` 创建新文件,例如 `api.py`:
```python
from flask import Blueprint, jsonify
api_bp = Blueprint('api', __name__, url_prefix='/api/v1')
@api_bp.route('/users')
def get_users():
return jsonify({'users': []})
```
2.`src/your_app/__init__.py` 注册:
```python
from src.your_app.routes.api import api_bp
app.register_blueprint(api_bp)
```
#### 添加模型
1.`src/your_app/models/` 创建新文件,例如 `user.py`:
```python
from datetime import datetime
from src.your_app import db
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
```
2.`src/your_app/models/__init__.py` 导入:
```python
from .user import User
__all__ = ['db', 'User']
```
3. 创建迁移:
```bash
flask db migrate -m "Add User model"
flask db upgrade
```
#### 添加服务
`src/your_app/services/` 创建业务逻辑:
```python
from src.your_app.models import User, db
class UserService:
@staticmethod
def create_user(username, email):
user = User(username=username, email=email)
db.session.add(user)
db.session.commit()
return user
```
## 环境配置
### 开发环境
```bash
export FLASK_ENV=development
python run_dev.py
```
- 启用调试模式
- 使用开发数据库
- 详细错误信息
### 生产环境
```bash
export FLASK_ENV=production
gunicorn -c gunicorn.conf.py "src.your_app:create_app()"
```
- 关闭调试模式
- 使用生产数据库
- 安全配置
### 测试环境
```bash
export FLASK_ENV=testing
pytest
```
- 使用内存数据库
- 关闭CSRF保护
- 快速测试
## 常见任务
### 运行测试
```bash
pip install -r requirements/test.txt
pytest
pytest --cov=src tests/ # 带覆盖率
```
### 代码检查
```bash
pip install -r requirements/development.txt
flake8 src/
pylint src/
black src/ # 格式化
isort src/ # 排序导入
```
### 数据库操作
```bash
# 创建迁移
flask db migrate -m "描述"
# 应用迁移
flask db upgrade
# 回滚迁移
flask db downgrade
# 查看迁移历史
flask db history
```
## 注意事项
1. **不要提交敏感信息**
- `.env` 文件已加入.gitignore
- 不要将密钥、密码等提交到代码库
2. **环境变量必需项**
- `SECRET_KEY`: Flask密钥必需
- `DATABASE_URL`: 数据库连接(必需)
- `FLASK_ENV`: 运行环境可选默认development
3. **生产环境安全**
- 必须设置强SECRET_KEY
- 必须使用非SQLite数据库
- 必须配置CORS_ORIGINS限制
- 必须启用HTTPS
4. **数据库迁移**
- 始终使用Flask-Migrate管理数据库变更
- 不要直接修改数据库结构
- 迁移文件应该提交到代码库
## 获取帮助
- 查看 [README.md](README.md) 了解完整文档
- 查看 [QUICK_START.md](QUICK_START.md) 快速开始
- 查看 [PROJECT_STRUCTURE.md](PROJECT_STRUCTURE.md) 了解项目结构
- 查看 [docs/](docs/) 目录了解详细文档