291 lines
5.6 KiB
Markdown
291 lines
5.6 KiB
Markdown
# 模板使用说明
|
||
|
||
## 模板特性
|
||
|
||
本模板基于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/) 目录了解详细文档
|
||
|