""" 应用配置管理 使用Pydantic Settings管理环境变量和配置 """ from typing import List, Optional from functools import lru_cache from pydantic import Field from pydantic_settings import BaseSettings class Settings(BaseSettings): """应用设置""" # 应用基础配置 APP_NAME: str = "DeepRisk Backend" APP_VERSION: str = "0.1.0" DEBUG: bool = Field(default=False, env="DEBUG") ENVIRONMENT: str = Field(default="development", env="ENVIRONMENT") SECRET_KEY: str = Field(..., env="SECRET_KEY") API_V1_STR: str = Field(default="/api/v1", env="API_V1_STR") # 数据库配置 DATABASE_URL: str = Field(..., env="DATABASE_URL") DB_ECHO: bool = Field(default=False, env="DB_ECHO") # Redis配置 REDIS_URL: str = Field(default="redis://localhost:6379/0", env="REDIS_URL") REDIS_PASSWORD: Optional[str] = Field(default=None, env="REDIS_PASSWORD") REDIS_DB: int = Field(default=0, env="REDIS_DB") # JWT配置 JWT_SECRET_KEY: str = Field(..., env="JWT_SECRET_KEY") JWT_ALGORITHM: str = Field(default="HS256", env="JWT_ALGORITHM") JWT_EXPIRE_MINUTES: int = Field(default=30, env="JWT_EXPIRE_MINUTES") JWT_REFRESH_EXPIRE_DAYS: int = Field(default=7, env="JWT_REFRESH_EXPIRE_DAYS") # 文件上传配置 UPLOAD_DIR: str = Field(default="./static/uploads", env="UPLOAD_DIR") MAX_FILE_SIZE: int = Field(default=10 * 1024 * 1024, env="MAX_FILE_SIZE") # 10MB ALLOWED_EXTENSIONS: str = Field( default="xlsx,xls,csv,pdf,doc,docx", env="ALLOWED_EXTENSIONS" ) # Celery配置 CELERY_BROKER_URL: str = Field(default="redis://localhost:6379/1", env="CELERY_BROKER_URL") CELERY_RESULT_BACKEND: str = Field(default="redis://localhost:6379/2", env="CELERY_RESULT_BACKEND") # 邮件配置 MAIL_USERNAME: Optional[str] = Field(default=None, env="MAIL_USERNAME") MAIL_PASSWORD: Optional[str] = Field(default=None, env="MAIL_PASSWORD") MAIL_FROM: Optional[str] = Field(default=None, env="MAIL_FROM") MAIL_PORT: int = Field(default=587, env="MAIL_PORT") MAIL_SERVER: Optional[str] = Field(default=None, env="MAIL_SERVER") MAIL_FROM_NAME: Optional[str] = Field(default=None, env="MAIL_FROM_NAME") # 日志配置 LOG_LEVEL: str = Field(default="INFO", env="LOG_LEVEL") LOG_FILE: str = Field(default="./logs/deeprisk.log", env="LOG_FILE") LOG_ROTATION: str = Field(default="100 MB", env="LOG_ROTATION") LOG_RETENTION: str = Field(default="30 days", env="LOG_RETENTION") # 风险检测配置 RISK_CHECK_BATCH_SIZE: int = Field(default=1000, env="RISK_CHECK_BATCH_SIZE") RISK_DETECTION_THRESHOLD: float = Field(default=0.05, env="RISK_DETECTION_THRESHOLD") MAX_CONCURRENT_TASKS: int = Field(default=10, env="MAX_CONCURRENT_TASKS") # 报告生成配置 REPORT_TEMPLATE_DIR: str = Field(default="./templates", env="REPORT_TEMPLATE_DIR") REPORT_OUTPUT_DIR: str = Field(default="./static/reports", env="REPORT_OUTPUT_DIR") PDF_ENGINE: str = Field(default="reportlab", env="PDF_ENGINE") @property def allowed_extensions_list(self) -> List[str]: """解析ALLOWED_EXTENSIONS为列表""" if isinstance(self.ALLOWED_EXTENSIONS, str): return [ext.strip() for ext in self.ALLOWED_EXTENSIONS.split(",") if ext.strip()] return self.ALLOWED_EXTENSIONS class Config: env_file = ".env" case_sensitive = True @lru_cache() def get_settings() -> Settings: """获取应用设置实例(单例模式)""" return Settings() # 全局设置实例 settings = get_settings()