import os import secrets from dotenv import load_dotenv # 加载环境变量 load_dotenv() class BaseConfig: """基础配置类""" # 应用设置 SECRET_KEY = os.environ.get('SECRET_KEY') or secrets.token_hex(16) DEBUG = False # 数据库设置 SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///email_system.db' SQLALCHEMY_TRACK_MODIFICATIONS = False # SMTP服务器设置 SMTP_HOST = '0.0.0.0' SMTP_PORT = 25 # 存储设置 MAIL_STORAGE_PATH = os.path.join(os.getcwd(), 'email_data') # 日志设置 LOG_LEVEL = 'INFO' LOG_FILE = os.path.join(os.getcwd(), 'logs', 'email_system.log') # API设置 API_RATE_LIMIT = '200/hour' API_TOKEN_EXPIRE = 3600 * 24 * 7 # 7天 # 邮件域名配置 MAIL_DOMAINS = os.environ.get('MAIL_DOMAINS', 'example.com,mail.example.com').split(',') class DevelopmentConfig(BaseConfig): """开发环境配置""" DEBUG = True LOG_LEVEL = 'DEBUG' # 使用内存数据库方便开发 # SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:' class TestingConfig(BaseConfig): """测试环境配置""" TESTING = True DEBUG = True # 使用内存数据库进行测试 SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:' # 使用随机端口进行测试 SMTP_PORT = 2525 class ProductionConfig(BaseConfig): """生产环境配置""" DEBUG = False LOG_LEVEL = 'ERROR' # SMTP服务器设置 SMTP_PORT = 25 # API设置 API_RATE_LIMIT = '100/hour' # 配置映射 config_by_name = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, 'default': DevelopmentConfig } # 根据环境变量选择配置 active_config = config_by_name.get(os.environ.get('FLASK_ENV', 'default'), DevelopmentConfig)