Files
certificate-system/backend/app/core/config.py

42 lines
1.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
from dataclasses import dataclass, field
from functools import lru_cache
def _csv_env(name: str, default: list[str]) -> list[str]:
raw = os.getenv(name)
if not raw:
return default
return [item.strip() for item in raw.split(",") if item.strip()]
@dataclass(frozen=True)
class Settings:
app_name: str = os.getenv("APP_NAME", "Certificate Management System")
app_env: str = os.getenv("APP_ENV", "development")
database_url: str = os.getenv("DATABASE_URL", "sqlite:///./dev.db")
secret_key: str = os.getenv("SECRET_KEY", "change-me")
public_base_url: str = os.getenv("PUBLIC_BASE_URL", "http://localhost:8080")
certificate_no_secret: str = os.getenv("CERTIFICATE_NO_SECRET", "change-me")
pdf_cache_days: int = int(os.getenv("PDF_CACHE_DAYS", "30"))
data_root: str = os.getenv("DATA_ROOT", "/data/certificate-system")
cors_origins: list[str] = field(
default_factory=lambda: _csv_env("CORS_ORIGINS", ["http://localhost:5173", "http://localhost:8080"])
)
# 短信服务配置
# local=本地测试验证码打印到终端aliyun=阿里云短信
sms_mode: str = os.getenv("SMS_MODE", "local")
aliyun_access_key_id: str = os.getenv("ALIYUN_ACCESS_KEY_ID", "")
aliyun_access_key_secret: str = os.getenv("ALIYUN_ACCESS_KEY_SECRET", "")
aliyun_sms_sign_name: str = os.getenv("ALIYUN_SMS_SIGN_NAME", "")
aliyun_sms_template_code: str = os.getenv("ALIYUN_SMS_TEMPLATE_CODE", "")
@lru_cache
def get_settings() -> Settings:
return Settings()
settings = get_settings()