config.py 1007 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from functools import lru_cache
  2. from pydantic_settings import BaseSettings, SettingsConfigDict
  3. from pydantic import Field
  4. class Settings(BaseSettings):
  5. # -----------------------
  6. # App
  7. # -----------------------
  8. app_name: str = "MyApp"
  9. env: str = "PROD"
  10. debug: bool = False
  11. # -----------------------
  12. # Database / Cache
  13. # -----------------------
  14. database_url: str = Field(..., description="Async database DSN")
  15. redis_url: str
  16. # -----------------------
  17. # Security / API Keys
  18. # -----------------------
  19. openai_api_key: str
  20. stripe_api_key: str
  21. model_config = SettingsConfigDict(
  22. env_file=".env",
  23. env_file_encoding="utf-8",
  24. case_sensitive=False,
  25. )
  26. @lru_cache
  27. def get_settings() -> Settings:
  28. """
  29. 避免多次实例化 Settings(FastAPI 官方推荐)
  30. """
  31. return Settings()
  32. settings = get_settings()
  33. # -----------------------
  34. # Global constants
  35. # -----------------------
  36. BASE_CURRENCY = "EUR"