Files
4an-workorder/app/config.py
T

57 lines
2.6 KiB
Python
Executable File

import os
from pathlib import Path
from dotenv import load_dotenv
# 尽量兼容多种 .env 放置方式
BASE_DIR = Path(__file__).resolve().parent.parent # /home/.../4an
# 1. 优先加载项目根目录 .env
load_dotenv(BASE_DIR / '.env')
# 2. 兼容放在 app 目录下的 .env
load_dotenv(BASE_DIR / 'app' / '.env')
# 3. 再加载一次默认搜索路径(当前工作目录及其父级)
load_dotenv()
class Config:
"""配置类,支持从环境变量获取配置
环境变量优先级高于默认值,可在系统环境变量中设置这些参数
"""
SECRET_KEY = os.environ.get('SECRET_KEY', os.urandom(24))
# 优先读取 SQLALCHEMY_DATABASE_URI,兼容旧配置;否则回退到 DATABASE_URI
SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI') or os.environ.get('DATABASE_URI')
SQLALCHEMY_ENGINE_OPTIONS = {
'pool_pre_ping': True, # 每次取连接前验证是否可用
'pool_recycle': 1800, # 连接空闲 30 分钟后自动回收重建
'pool_timeout': 10, # 等待连接池超时(秒)
'connect_args': {
'connect_timeout': 5, # 连接 MySQL 超时
'read_timeout': 15, # 读取超时
'write_timeout': 15, # 写入超时
},
}
LZMX_WEBHOOK_URL = os.environ.get('LZMX_WEBHOOK_URL')
SQLALCHEMY_TRACK_MODIFICATIONS = False
UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', 'static/uploads')
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}
# 添加1key110数据库配置
KEY110_DB = {
'host': os.environ.get('KEY110_DB_HOST'),
'user': os.environ.get('KEY110_DB_USER'),
'password': os.environ.get('KEY110_DB_PASSWORD'),
'database': os.environ.get('KEY110_DB_DATABASE')
}
# Casdoor 配置
CASDOOR_ENDPOINT = os.environ.get('CASDOOR_ENDPOINT', 'http://localhost:8000')
CASDOOR_CLIENT_ID = os.environ.get('CASDOOR_CLIENT_ID')
CASDOOR_CLIENT_SECRET = os.environ.get('CASDOOR_CLIENT_SECRET')
CASDOOR_ORGANIZATION_NAME = os.environ.get('CASDOOR_ORGANIZATION_NAME', 'built-in')
CASDOOR_APPLICATION_NAME = os.environ.get('CASDOOR_APPLICATION_NAME', 'app-built-in')
CASDOOR_REDIRECT_URI = os.environ.get('CASDOOR_REDIRECT_URI', 'http://localhost:18061/callback')
# 项目名称(用于与 Casdoor 用户标签匹配权限)
PROJECT_NAME = os.environ.get('PROJECT_NAME')
# 会话 Cookie 配置(跨域 SSO 时建议设置)
SESSION_COOKIE_SAMESITE = os.environ.get('SESSION_COOKIE_SAMESITE', 'Lax')
SESSION_COOKIE_SECURE = os.environ.get('SESSION_COOKIE_SECURE', 'False').lower() == 'true'