import os from functools import lru_cache from typing import Optional from pydantic import BaseModel from dotenv import load_dotenv # 加载环境变量(如果直接从main导入,这里可能是冗余的,但为了安全起见) load_dotenv() class Settings(BaseModel): """应用程序配置类""" # DashScope配置 dashscope_api_key: str = os.getenv("DASHSCOPE_API_KEY", "sk-caa199589f1c451aaac471fad2986e28") # 服务器配置 host: str = os.getenv("HOST", "0.0.0.0") port: int = int(os.getenv("PORT", "9001")) debug: bool = os.getenv("DEBUG", "False").lower() in ["true", "1", "t", "yes"] # 腾讯云配置 qcloud_secret_id: str = os.getenv("QCLOUD_SECRET_ID", "") qcloud_secret_key: str = os.getenv("QCLOUD_SECRET_KEY", "") qcloud_cos_region: str = os.getenv("QCLOUD_COS_REGION", "ap-guangzhou") qcloud_cos_bucket: str = os.getenv("QCLOUD_COS_BUCKET", "") qcloud_cos_domain: str = os.getenv("QCLOUD_COS_DOMAIN", "") # 数据库配置 db_host: str = os.getenv("DB_HOST", "localhost") db_port: int = int(os.getenv("DB_PORT", "3306")) db_user: str = os.getenv("DB_USER", "root") db_password: str = os.getenv("DB_PASSWORD", "password") db_name: str = os.getenv("DB_NAME", "ai_dressing") # 数据库URL @property def database_url(self) -> str: """ 构建SQLAlchemy数据库连接URL Returns: str: 数据库连接URL """ return f"mysql+pymysql://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}" # 其他配置可以根据需要添加 log_level: str = os.getenv("LOG_LEVEL", "INFO") @lru_cache() def get_settings() -> Settings: """ 获取应用程序配置 使用lru_cache装饰器避免重复读取环境变量,提高性能 Returns: Settings: 配置对象 """ return Settings() def validate_api_key(): """ 验证API密钥是否已配置 Raises: ValueError: 如果API密钥未配置 """ settings = get_settings() if not settings.dashscope_api_key: raise ValueError("DASHSCOPE_API_KEY未设置,请在.env文件中配置") return True def validate_qcloud_config(): """ 验证腾讯云配置是否已设置 Raises: ValueError: 如果腾讯云配置未正确设置 """ settings = get_settings() if not settings.qcloud_secret_id or not settings.qcloud_secret_key: raise ValueError("腾讯云SecretId和SecretKey未设置,请在.env文件中配置") if not settings.qcloud_cos_bucket: raise ValueError("腾讯云COS存储桶名称未设置,请在.env文件中配置") return True