Files
opc-manager/backend/flask_app.py
mac 39513c0a7b feat: 版本号自动同步 + 五色标记 + 财务指标颜色优化
- 左上角版本号从 git tag 自动读取(flask_app.py → Jinja2 注入)
- 项目管理右键菜单新增标黄/蓝/绿/紫四种颜色标记 + 取消标记
- 应收/应付列正数绿负数红(finance+plan 双模块)
- 经营月报利润行负数标红
- 预算模块移除状态筛选标签,添加年份选择器
- 年份下拉框 pr-6 修复箭头重叠
2026-07-15 10:03:12 +08:00

55 lines
1.8 KiB
Python
Raw 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.
# flask_app.py — 入口app 创建 + 蓝图注册 + 迁移 + 启动
# 拆分后仅 ~35 行,所有路由在 routes.py业务辅助在 helpers.py基础设施在 db.py
import os
import sys
# 确保 backend 目录在 sys.path 中(兼容 gunicorn --preload 模式)
_backend_dir = os.path.dirname(os.path.abspath(__file__))
if _backend_dir not in sys.path:
sys.path.insert(0, _backend_dir)
from flask import Flask
from db import ROOT # 触发 load_dotenv + 建目录
from routes import bp
from migrations import run_migrations
app = Flask(
__name__,
template_folder=str(ROOT / "templates"),
static_folder=str(ROOT / "static"),
)
# secret_key 必须从环境变量注入,禁止硬编码兜底——否则 session 可被伪造。
_secret_key = os.environ.get("SECRET_KEY")
if not _secret_key:
raise RuntimeError(
"缺少必需的环境变量 SECRET_KEY请在 .env 中配置(建议: "
"python3 -c 'import secrets;print(secrets.token_hex(32))'"
)
app.secret_key = _secret_key
app.config["TEMPLATES_AUTO_RELOAD"] = True
# 自动读取 git tag 作为版本号,保持左上角与发布 tag 一致
import subprocess as _sp
def _git_version():
try:
tags = _sp.check_output(
["git", "tag", "--sort=-v:refname"],
cwd=_backend_dir, stderr=_sp.DEVNULL,
).decode().strip().split("\n")
return tags[0] if tags and tags[0] else "dev"
except Exception:
return "dev"
app.jinja_env.globals["app_version"] = _git_version()
app.register_blueprint(bp)
# 模块级执行迁移(保留 gunicorn --preload 行为:导入即触发)
run_migrations()
if __name__ == "__main__":
app.run(
host="127.0.0.1",
port=5177,
debug=os.environ.get("FLASK_DEBUG", "false").lower() in ("true", "1", "yes"),
)