一个可直接用于业务开发的 Flask 后端模板。
它提供生产项目常见的基础能力:认证、统一错误处理、请求追踪、结构化日志、Prometheus 指标、限流、测试、CI、Docker。
- 目标:作为后端项目初始化模板,帮助你快速进入业务开发
- 形态:模板能力 + 示例业务模块(
auth/poster) - 非目标:不绑定某个行业业务,不做“大而全业务系统”
- JWT 认证(注册、登录、refresh)
- 统一错误响应格式
- 请求追踪(
X-Request-ID) - 响应耗时头(
X-Response-Time) - Prometheus 指标(
/metrics) - 接口限流(Flask-Limiter)
- 安全响应头
- SQLAlchemy + Flask-Migrate
- Pytest + 覆盖率、flake8、black、mypy
- GitHub Actions CI
- Docker / Docker Compose
├── app/
│ ├── controller/ # 路由层(HTTP 入口)
│ ├── services/ # 业务层(核心逻辑)
│ ├── models/ # 数据模型(SQLAlchemy)
│ ├── schemas/ # 请求参数模型(Pydantic)
│ ├── exceptions/ # 业务异常定义
│ ├── extensions/ # 横切能力(日志/监控/限流/错误处理等)
│ └── utils/ # 工具与校验
├── tests/
├── docs/
├── config.py
├── run.py
├── wsgi.py
├── pyproject.toml
├── Dockerfile
└── docker-compose.yml
- Python
3.11+ - 建议使用
uv(也支持 pip) - 可选:Docker / Docker Compose
# 1) 安装依赖
uv sync
# 2) 配置环境变量
cp .env.example .env
# 3) 启动服务
python run.py默认地址:http://127.0.0.1:5000
docker-compose.yml使用 production 配置,必须提供密钥。
export SECRET_KEY='replace-this'
export JWT_SECRET_KEY='replace-this'
docker compose up --build服务地址:
- API:
http://localhost:8000 - Prometheus:
http://localhost:9091 - Grafana:
http://localhost:3000
| 变量名 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|
FLASK_ENV |
否 | development |
运行环境:development/production |
SECRET_KEY |
生产必填 | 无 | Flask 密钥 |
JWT_SECRET_KEY |
生产必填 | 无 | JWT 签名密钥 |
DATABASE_URL |
生产必填 | sqlite:///data-dev.sqlite |
数据库连接串 |
LOG_LEVEL |
否 | INFO |
日志等级 |
RATE_LIMIT_STORAGE_URI |
否 | memory:// |
限流存储,生产建议 Redis |
GET /healthGET /readiness
POST /auth/registerPOST /auth/loginGET /auth/profile/<user_id>POST /auth/refresh(支持GET兼容,推荐POST)POST /auth/logout
说明:
refresh使用 refresh token 轮换,旧 refresh token 会被撤销logout会撤销当前 refresh token
POST /poster/addGET /poster/listGET /poster/<poster_id>PUT /poster/<poster_id>DELETE /poster/<poster_id>GET /message(公开已发布帖子查询)
GET /metrics
{
"code": "200",
"message": "success",
"data": {}
}{
"status": "error",
"code": 40001,
"message": "错误信息",
"request_id": "uuid",
"data": null
}新增业务模块请遵循标准流程文档:
简要流程:
- 定义
schema - 定义
model(如需持久化) - 实现
service - 实现
controller - 注册
blueprint - 增加测试
- 更新文档
# 单测 + 覆盖率
.venv/bin/pytest -q
# Lint
.venv/bin/flake8 app tests
# 格式检查
.venv/bin/black --check app tests
# 类型检查
.venv/bin/mypy appGitHub Actions 会执行:
- 安装依赖
flake8black --checkmypypytest --cov-fail-under=60docker build
CI 文件:.github/workflows/ci.yml
- 使用 Postgres/MySQL,不建议生产使用 SQLite
- 限流存储切换到 Redis(当前默认 memory)
- 密钥通过 Secret 管理(不要写入仓库)
- 配置日志采集(ELK / Loki)
- 用 Prometheus + Grafana 监控接口延迟与错误率