feat: 前端渲染以及 放开.env的ignore

hsyh
NoahLan 4 months ago
parent 8119bb4c8f
commit 94010c8c2b

2
.gitignore vendored

@ -37,8 +37,6 @@ ENV/
# Flask 实例与本地配置
instance/
.flaskenv
.env
.env.*
.envrc
# 运行期与数据库文件(你的项目含 iti/runtime/iti-flask_dev.db

@ -0,0 +1,40 @@
FLASK_ENV=dev
SECRET_KEY=iti-flask
JWT_SECRET_KEY=iti-flask
DATABASE_URL=sqlite:///runtime/iti-flask_dev.db
# 前端相关
# FRONTEND_ENABLED=False # 是否启用前端渲染
# FRONTEND_PATH=dist # 前端文件所在位置,若static则无需填写
# ============================================
# 文件存储 - 阿里云OSS
# ============================================
# ALIYUN_OSS_ACCESS_KEY_ID=LTAI5t...
# ALIYUN_OSS_ACCESS_KEY_SECRET=your_access_key_secret
# ALIYUN_OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com
# ALIYUN_OSS_BUCKET=your-bucket-name
# ============================================
# 文件存储 - 腾讯云COS
# ============================================
# TENCENT_COS_SECRET_ID=AKIDxxx
# TENCENT_COS_SECRET_KEY=your_secret_key
# TENCENT_COS_REGION=ap-guangzhou
# TENCENT_COS_BUCKET=your-bucket-1234567890
# ============================================
# 文件存储 - 七牛云Kodo
# ============================================
# QINIU_KODO_ACCESS_KEY=your_access_key
# QINIU_KODO_SECRET_KEY=your_secret_key
# QINIU_KODO_BUCKET=your-bucket-name
# QINIU_KODO_DOMAIN=cdn.example.com
# ============================================
# 文件存储 - 华为云OBS
# ============================================
# HUAWEI_OBS_ACCESS_KEY_ID=your_access_key_id
# HUAWEI_OBS_SECRET_ACCESS_KEY=your_secret_access_key
# HUAWEI_OBS_SERVER=obs.cn-north-4.myhuaweicloud.com
# HUAWEI_OBS_BUCKET=your-bucket-name

@ -0,0 +1,17 @@
BASE_DIR=D:/Projects/iTi/iTi-Flask/iti
#
FLASK_ENV=dev
SECRET_KEY=iti-flask
JWT_SECRET_KEY=iti-flask
DATABASE_URL=sqlite:///${BASE_DIR}/runtime/iti-flask_dev.db
# 前端相关
FRONTEND_ENABLED=False # 是否启用前端渲染
FRONTEND_PATH=dist # 前端文件所在位置,若static则无需填写
# ============================================
# 文件存储 - 阿里云OSS
# ============================================
ALIYUN_OSS_ACCESS_KEY_ID=LTAI5t9cymUAWHVEo36yygaT
ALIYUN_OSS_ACCESS_KEY_SECRET=FaaUsxadRYyshbYeAV8ypZNYVOx3tE
ALIYUN_OSS_ENDPOINT=oss-cn-chengdu.aliyuncs.com
ALIYUN_OSS_BUCKET=maintaince-dev

@ -0,0 +1,7 @@
FLASK_ENV=prod
SECRET_KEY=zhSYJn577LgxyWDuQboM9wX3j2BHEFUP
JWT_SECRET_KEY=8YD37VvM3WgdpmKNt7kVFNbKnya4hBRh
DATABASE_URL=sqlite:///runtime/iti-flask_dev.db
# 前端相关
FRONTEND_ENABLED=False # 是否启用前端渲染
FRONTEND_PATH=dist # 前端文件所在位置,若static则无需填写

@ -1,11 +1,15 @@
from iti.applications.extensions import broadcast_execute
from iti.applications.routes.sys import register_sys_bp
from iti.applications.routes.index import bp as index_bp
from iti.applications.routes.front import bp as frontend_bp
def init_routes(app):
# 蓝图注册
app.register_blueprint(index_bp)
# 前端路由注册(可选)
if app.config.get("FRONTEND_ENABLED", False):
app.register_blueprint(frontend_bp)
# 系统蓝图注册
register_sys_bp(app)

@ -0,0 +1,22 @@
from apiflask import APIBlueprint
from flask import send_from_directory, current_app
import os
bp = APIBlueprint("front", __name__, tag="前端")
def _get_frontend_path():
return os.path.join(current_app.static_folder, current_app.config.get("FRONTEND_PATH", ""))
@bp.get("/")
def index():
"""渲染前端 SPA 入口页面"""
return send_from_directory(_get_frontend_path(), "index.html")
@bp.get('/<path:fallback>')
def fallback(fallback):
"""兜底: 避免history模式下的影响"""
frontend_path = _get_frontend_path()
if not os.path.exists(os.path.join(frontend_path, fallback)):
return send_from_directory(frontend_path, 'index.html')
else:
return send_from_directory(frontend_path, fallback)

@ -6,6 +6,20 @@ import json
# 项目根目录
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
def _get_bool_env(key: str, default: bool = False) -> bool:
"""从环境变量获取布尔值
Args:
key: 环境变量名
default: 默认值
Returns:
布尔值
"""
value = os.getenv(key)
if value is None:
return default
return value.lower() in ('true', '1', 'yes', 'on')
def _load_env_file():
"""加载 .env 文件(模块级别调用)"""
@ -177,6 +191,11 @@ class BaseConfig:
},
}
# 是否启用前端渲染
FRONTEND_ENABLED = _get_bool_env("FRONTEND_ENABLED", False)
# 前端页面文件路径
FRONTEND_PATH = os.getenv("FRONTEND_PATH", "dist")
# 业务日志配置
SYSLOG_MAX_BODY_CHARS = 2048
SYSLOG_ITEMS_SAMPLE = 5

Loading…
Cancel
Save