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'