""" 配置模块入口 ============================================================= 负责: 1. 加载 .env 环境变量(最先执行,保证子模块能读取配置) 2. 重新导出所有子模块的配置项,供业务代码统一使用 使用方式: from config import FLASK_DEMO, DATABASE_URL, REDIS_URL, JWT_SALT """ import os from dotenv import load_dotenv def _load_env_file(): """加载 .env 配置文件""" root_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) env_path = os.path.join(root_path, '.env') if os.path.exists(env_path): load_dotenv(env_path) return True return False # 在任何 config 子模块被 import 之前加载 .env _load_env_file() # ============================================================ # 重新导出所有子模块配置(统一入口) # ============================================================ # 应用基础配置 from config.app import ( # noqa: E402 FLASK_NAME, FLASK_VERSION, FLASK_SECRET_KEY, FLASK_HOST, FLASK_PORT, FLASK_SITE_DOMAIN, FLASK_APP, FLASK_ENV, FLASK_DEBUG, FLASK_USE_RELOADER, FLASK_DEMO, FLASK_SYSTEM, FLASK_ROOT_PATH, FLASK_TEMPLATE_FOLDER, FLASK_STATIC_FOLDER, FLASK_UPLOAD_DIR, FLASK_TEMP_PATH, FLASK_FILE_URL, UPLOAD_ALLOWED_EXTS, UPLOAD_MAX_SIZE_MB, CORS_ALLOWED_ORIGINS, ) # 数据库配置 from config.database import ( # noqa: E402 DatabaseConfig, DB_PREFIX, DB_DRIVER, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD, DB_DEBUG, DB_SSL, DATABASE_URL, ) # Redis 缓存配置 from config.redis import ( # noqa: E402 REDIS_HOST, REDIS_PORT, REDIS_PASSWORD, REDIS_INDEX, REDIS_AUTH, REDIS_DECODE_RESPONSES, REDIS_URL, ) # JWT + 权限 + 白名单配置 from config.auth import ( # noqa: E402 JWT_SALT, JWT_EXPIRE_MINUTES, LOGIN_FAIL_MAX, LOGIN_LOCK_SECONDS, PERMISSION_ENABLED, INTERNAL_API_KEY, INTERNAL_ALLOWED_IPS, LOGIN_WHITELIST_EXACT, LOGIN_WHITELIST_PREFIX, LOGIN_WHITELIST_WILDCARD, LOGIN_WHITELIST_DEBUG, LOGIN_WHITELIST_LOG_ACCESS, CAPTCHA_BYPASS_CODE, ) # 邮件配置 from config.mail import ( # noqa: E402 MAIL_MAILER, MAIL_SERVER, MAIL_PORT, MAIL_USE_SSL, MAIL_USERNAME, MAIL_PASSWORD, MAIL_ENCRYPTION, MAIL_FROM_NAME, MAIL_FROM_ADDRESS, ) # 短信配置 from config.sms import ( # noqa: E402 SMS_PROVIDER, SMS_ALIYUN_ACCESS_KEY_ID, SMS_ALIYUN_ACCESS_KEY_SECRET, SMS_ALIYUN_SIGN_NAME, SMS_ALIYUN_ENDPOINT, SMS_ALIYUN_CONNECT_TIMEOUT, SMS_ALIYUN_READ_TIMEOUT, ) # 验证码配置 from config.captcha import ( # noqa: E402 CAPTCHA_LENGTH, CAPTCHA_EXPIRE, CAPTCHA_RATE_LIMIT, CAPTCHA_RATE_WINDOW, CAPTCHA_CHARS, CAPTCHA_FONT_PATH, CAPTCHA_IMAGE_WIDTH, CAPTCHA_IMAGE_HEIGHT, CAPTCHA_FONT_SIZE, CAPTCHA_NOISE_LINES, CAPTCHA_NOISE_DOTS, ) __all__ = [ # 应用基础配置 'FLASK_NAME', 'FLASK_VERSION', 'FLASK_SECRET_KEY', 'FLASK_HOST', 'FLASK_PORT', 'FLASK_SITE_DOMAIN', 'FLASK_APP', 'FLASK_ENV', 'FLASK_DEBUG', 'FLASK_USE_RELOADER', 'FLASK_DEMO', 'FLASK_SYSTEM', 'FLASK_ROOT_PATH', 'FLASK_TEMPLATE_FOLDER', 'FLASK_STATIC_FOLDER', 'FLASK_UPLOAD_DIR', 'FLASK_TEMP_PATH', 'FLASK_FILE_URL', 'UPLOAD_ALLOWED_EXTS', 'UPLOAD_MAX_SIZE_MB', 'CORS_ALLOWED_ORIGINS', # 数据库配置 'DatabaseConfig', 'DB_PREFIX', 'DB_DRIVER', 'DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USERNAME', 'DB_PASSWORD', 'DB_DEBUG', 'DB_SSL', 'DATABASE_URL', # Redis 配置 'REDIS_HOST', 'REDIS_PORT', 'REDIS_PASSWORD', 'REDIS_INDEX', 'REDIS_AUTH', 'REDIS_DECODE_RESPONSES', 'REDIS_URL', # JWT + 权限 + 白名单配置 'JWT_SALT', 'JWT_EXPIRE_MINUTES', 'LOGIN_FAIL_MAX', 'LOGIN_LOCK_SECONDS', 'PERMISSION_ENABLED', 'INTERNAL_API_KEY', 'INTERNAL_ALLOWED_IPS', 'LOGIN_WHITELIST_EXACT', 'LOGIN_WHITELIST_PREFIX', 'LOGIN_WHITELIST_WILDCARD', 'LOGIN_WHITELIST_DEBUG', 'LOGIN_WHITELIST_LOG_ACCESS', 'CAPTCHA_BYPASS_CODE', # 邮件配置 'MAIL_MAILER', 'MAIL_SERVER', 'MAIL_PORT', 'MAIL_USE_SSL', 'MAIL_USERNAME', 'MAIL_PASSWORD', 'MAIL_ENCRYPTION', 'MAIL_FROM_NAME', 'MAIL_FROM_ADDRESS', # 短信配置 'SMS_PROVIDER', 'SMS_ALIYUN_ACCESS_KEY_ID', 'SMS_ALIYUN_ACCESS_KEY_SECRET', 'SMS_ALIYUN_SIGN_NAME', 'SMS_ALIYUN_ENDPOINT', 'SMS_ALIYUN_CONNECT_TIMEOUT', 'SMS_ALIYUN_READ_TIMEOUT', # 验证码配置 'CAPTCHA_LENGTH', 'CAPTCHA_EXPIRE', 'CAPTCHA_RATE_LIMIT', 'CAPTCHA_RATE_WINDOW', 'CAPTCHA_CHARS', 'CAPTCHA_FONT_PATH', 'CAPTCHA_IMAGE_WIDTH', 'CAPTCHA_IMAGE_HEIGHT', 'CAPTCHA_FONT_SIZE', 'CAPTCHA_NOISE_LINES', 'CAPTCHA_NOISE_DOTS', ]