Files
DPM/backend/app/config.py
T
Pine 00cb76c73f feat: 管理后台迁移至 FastAPI + Jinja2 服务端渲染
- GET /admin:Jinja 模板渲染(登录页 / 管理台),媒体库、播放列表、设置由服务端渲染
- POST /admin/login:表单登录 + HMAC 签名 Cookie(DPM_ADMIN_SECRET),GET /admin/logout 退出
- /static/admin.css + admin.js:动态操作(上传进度/播放控制/设置/SSE 状态/预览弹窗)调 REST 后整页刷新
- 前端移除 React Admin 页面与 /admin 路由(Admin.jsx 删除);媒体/播放列表接口保持不变
- 依赖改用 uv 管理(pyproject.toml + uv.lock,含 jinja2),README 更新启动方式
2026-08-17 21:30:44 +08:00

73 lines
2.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.
# -*- coding: utf-8 -*-
"""OPC 智能园区后端 —— 全局配置(backend/.env 可覆盖,未配置时用默认值)"""
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent # backend/
def _load_dotenv(path):
"""极简 .env 解析:KEY=VALUE,支持 # 注释与引号"""
if not Path(path).exists():
return
for raw in Path(path).read_text("utf-8").splitlines():
line = raw.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, _, value = line.partition("=")
key = key.strip()
value = value.strip().strip('"').strip("'")
if key and key not in os.environ:
os.environ[key] = value
_load_dotenv(BASE_DIR / ".env")
def _env(key, default):
return os.getenv(key, default)
class Settings:
# ---- HTTP ----
HOST = _env("DPM_HOST", _env("FASTAPI_HOST", "0.0.0.0"))
PORT = int(_env("DPM_PORT", _env("FASTAPI_PORT", "8000")))
# ---- 数据目录 ----
MEDIA_DIR = Path(_env("DPM_MEDIA_DIR", str(BASE_DIR / "media")))
DATA_FILE = Path(_env("DPM_DATA_FILE", str(BASE_DIR / "data.json")))
DIST_DIR = Path(_env("DPM_DIST_DIR", str(BASE_DIR.parent / "dist"))) # 前端构建产物(可选托管)
# ---- MQTT(优先使用 .env 中的局域网 Broker 配置) ----
MQTT_ENABLED = _env("DPM_MQTT_ENABLED", "1") == "1"
MQTT_HOST = _env("DPM_MQTT_HOST", _env("MQTT_BROKER_HOST", "127.0.0.1"))
MQTT_PORT = int(_env("DPM_MQTT_PORT", _env("MQTT_BROKER_PORT", "1883")))
MQTT_USERNAME = _env("DPM_MQTT_USERNAME", _env("MQTT_USERNAME", "")) or None
MQTT_PASSWORD = _env("DPM_MQTT_PASSWORD", _env("MQTT_PASSWORD", "")) or None
MQTT_CLIENT_ID = _env("DPM_MQTT_CLIENT_ID", "dpm-backend")
# 前端 WebSocket 接入地址(默认按 .env 的 broker 主机 + EMQX 常规 ws 端口)
MQTT_WS_URL = _env(
"DPM_MQTT_WS",
f"ws://{_env('MQTT_PUBLIC_HOST', _env('MQTT_BROKER_HOST', 'localhost'))}:8083/mqtt",
)
MQTT_TICK_INTERVAL = float(_env("DPM_MQTT_TICK_INTERVAL", "2.2"))
# ---- 主题 ----
TOPIC_COMMAND = _env("DPM_TOPIC_COMMAND", "opc/display/command")
TOPIC_TICK = _env("DPM_TOPIC_TICK", "opc/dashboard/tick")
TOPIC_ACK = _env("DPM_TOPIC_ACK", "opc/display/ack")
# ---- 阿里云 DashScopeLLM + 语音识别) ----
DASHSCOPE_API_KEY = _env("DASHSCOPE_API_KEY", "")
LLM_MODEL = _env("DPM_LLM_MODEL", "qwen-plus") # 通义千问
ASR_MODEL = _env("DPM_ASR_MODEL", "paraformer-realtime-v2") # 流式语音识别
LLM_BASE_URL = _env("DPM_LLM_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1")
ASR_TIMEOUT = float(_env("DPM_ASR_TIMEOUT", "30"))
# ---- 管理后台 ----
ADMIN_SECRET = _env("DPM_ADMIN_SECRET", "dpm-admin-secret-change-me")
settings = Settings()