"""系统配置""" import os from urllib.parse import quote_plus from pydantic_settings import BaseSettings class Settings(BaseSettings): # 数据库 DB_HOST: str = os.getenv("DB_HOST", "localhost") DB_PORT: int = int(os.getenv("DB_PORT", "3306")) DB_USER: str = os.getenv("DB_USER", "aivirtual") DB_PASSWORD: str = os.getenv("DB_PASSWORD", "AiVirtual2024") DB_NAME: str = os.getenv("DB_NAME", "ai_virtual_news") # Redis REDIS_HOST: str = os.getenv("REDIS_HOST", "localhost") REDIS_PORT: int = int(os.getenv("REDIS_PORT", "6379")) # 安全 SECRET_KEY: str = os.getenv("SECRET_KEY", "dev-secret-key-change-in-prod") AES_KEY: str = os.getenv("AES_KEY", "your-aes-key-32-chars-change-now!") # 新闻平台 NEWS_PLATFORM_BASE_URL: str = os.getenv( "NEWS_PLATFORM_BASE_URL", "http://192.168.1.200:63120" ) # 日志目录 LOG_DIR: str = "/app/logs" @property def DATABASE_URL(self) -> str: # 对密码做 URL 编码,防止 @ # ! 等特殊字符破坏连接字符串 pwd = quote_plus(self.DB_PASSWORD) return f"mysql+aiomysql://{self.DB_USER}:{pwd}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}?charset=utf8mb4" @property def SYNC_DATABASE_URL(self) -> str: pwd = quote_plus(self.DB_PASSWORD) return f"mysql+pymysql://{self.DB_USER}:{pwd}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}?charset=utf8mb4" class Config: env_file = ".env" settings = Settings()