import os from datetime import timedelta class Config: # ========================================================= # 1. 基础路径与安全配置 # ========================================================= # 获取当前文件所在目录的绝对路径 (用于定位 uploads 文件夹等) BASE_DIR = os.path.abspath(os.path.dirname(__file__)) # Flask 的基础密钥 (用于 Session, Flash 消息等安全签名) SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret-key-1234') # ========================================================= # 2. 数据库配置 # ========================================================= # 优先读取 .env 中的 'DATABASE_URL'。 # 如果读不到,才回退使用默认的 localhost 连接字符串。 SQLALCHEMY_DATABASE_URI = os.getenv( 'DATABASE_URL', 'postgresql://postgres:1234@localhost:5432/inventory_system' ) # 关闭 SQLAlchemy 的事件追踪,减少内存消耗 (推荐设为 False) SQLALCHEMY_TRACK_MODIFICATIONS = False # ========================================================= # 3. JWT 配置 (修复 500 报错的核心区域) # ========================================================= # 【核心】必须设置 JWT_SECRET_KEY,否则 create_access_token 会报错 # 逻辑:优先读环境变量,读不到就用默认字符串 JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'default-jwt-secret-key-if-missing') # Access Token 有效期: 2 小时 JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=2) # Refresh Token 有效期: 7 天 JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=7) # ========================================================= # 4. 文件上传配置 # ========================================================= # 上传文件存储路径 UPLOAD_FOLDER = os.path.join(BASE_DIR, 'uploads') # 限制最大上传 16MB MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # ========================================================= # 5. Redis 配置 (用于单设备登录互踢) # ========================================================= REDIS_URL = os.getenv('REDIS_URL', 'redis://localhost:6379/0') # ========================================================= # 6. 邮件配置 # ========================================================= # 发件人邮箱(阿里企业邮箱) MAIL_USERNAME = os.getenv('MAIL_USERNAME', 'wms@iris-rs.cn') # 发件人邮箱密码 / 授权码 MAIL_PASSWORD = os.getenv('MAIL_PASSWORD', 'Q7nYyyESWlaThKjx') # SMTP 服务器地址(阿里企业邮发信服务器) MAIL_SERVER = os.getenv('MAIL_SERVER', 'smtp.mxhichina.com') # SMTP 端口(阿里邮箱使用 SSL 465) MAIL_PORT = int(os.getenv('MAIL_PORT', 465)) # 是否启用 TLS (587 端口通常需要) MAIL_USE_TLS = os.getenv('MAIL_USE_TLS', 'false').lower() in ('true', '1', 'yes') # 是否启用 SSL (465 端口通常需要,阿里邮箱必须启用 SSL) MAIL_USE_SSL = os.getenv('MAIL_USE_SSL', 'true').lower() in ('true', '1', 'yes') # 默认发件人(★ 必须与 MAIL_USERNAME 完全一致,否则阿里邮件服务器会拒绝) MAIL_DEFAULT_SENDER = os.getenv('MAIL_DEFAULT_SENDER', 'wms@iris-rs.cn') # 是否启用邮件发送功能(开发环境可设为 false 禁用) MAIL_ENABLED = os.getenv('MAIL_ENABLED', 'true').lower() in ('true', '1', 'yes')