# 配置管理 - 集中管理所有环境变量和敏感配置 import os from functools import lru_cache from typing import Optional class Settings: """应用配置类""" def __init__(self): # 阿里云百炼AI (DASHSCOPE) API Key self.DASHSCOPE_API_KEY: Optional[str] = os.getenv("DASHSCOPE_API_KEY") # 阿里云短信服务配置 self.SMS_ACCESS_KEY_ID: str = os.getenv("SMS_ACCESS_KEY_ID", "LTAI5tQAx5niD7JQVqGE5acE") self.SMS_ACCESS_KEY_SECRET: str = os.getenv("SMS_ACCESS_KEY_SECRET", "QsQFAEKBkaNynIoKyvdIi3BUyWVZu1") self.SMS_SIGN_NAME: str = os.getenv("SMS_SIGN_NAME", "苏州算力") self.SMS_TEMPLATE_CODE: str = os.getenv("SMS_TEMPLATE_CODE", "SMS_501590956") # 数据库配置 self.DATABASE_URL: str = os.getenv("DATABASE_URL", "postgresql://jiachenlong:Passwd1%403@pgm-bp1t5w248t7s1pvr.pg.rds.aliyuncs.com:5432/jiachenlong") # JWT配置 self.SECRET_KEY: str = os.getenv("SECRET_KEY", "jiachenlong-secret-key-change-in-production") self.ALGORITHM: str = os.getenv("ALGORITHM", "HS256") self.ACCESS_TOKEN_EXPIRE_MINUTES: int = int(os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "10080")) # 7天 # OSS配置 self.OSS_ACCESS_KEY_ID: Optional[str] = os.getenv("OSS_ACCESS_KEY_ID") self.OSS_ACCESS_KEY_SECRET: Optional[str] = os.getenv("OSS_ACCESS_KEY_SECRET") self.OSS_BUCKET: str = os.getenv("OSS_BUCKET", "jiachenlong-oss") self.OSS_ENDPOINT: str = os.getenv("OSS_ENDPOINT", "oss-cn-hangzhou.aliyuncs.com") # Redis配置 (可选,用于限流和缓存) self.REDIS_URL: Optional[str] = os.getenv("REDIS_URL") # API Rate Limiting self.RATE_LIMIT_ENABLED: bool = os.getenv("RATE_LIMIT_ENABLED", "true").lower() == "true" self.RATE_LIMIT_SMS_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_SMS_PER_MINUTE", "3")) self.RATE_LIMIT_OCR_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_OCR_PER_MINUTE", "10")) self.RATE_LIMIT_BATCH_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_BATCH_PER_MINUTE", "5")) self.RATE_LIMIT_API_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_API_PER_MINUTE", "60")) # 管理员账号 self.ADMIN_USERNAME: str = os.getenv("ADMIN_USERNAME", "admin") self.ADMIN_PASSWORD: str = os.getenv("ADMIN_PASSWORD", "admin123") def get_dashscope_api_key(self) -> str: """获取阿里云百炼API Key""" if not self.DASHSCOPE_API_KEY: raise ValueError("DASHSCOPE_API_KEY 环境变量未设置") return self.DASHSCOPE_API_KEY def get_sms_config(self) -> dict: """获取短信配置""" return { "access_key_id": self.SMS_ACCESS_KEY_ID, "access_key_secret": self.SMS_ACCESS_KEY_SECRET, "sign_name": self.SMS_SIGN_NAME, "template_code": self.SMS_TEMPLATE_CODE, } @lru_cache() def get_settings() -> Settings: """获取单例配置实例""" return Settings() # 导出便捷访问 settings = get_settings()