72 lines
3.1 KiB
Python
72 lines
3.1 KiB
Python
# 配置管理 - 集中管理所有环境变量和敏感配置
|
|
import os
|
|
from functools import lru_cache
|
|
from typing import Optional
|
|
|
|
|
|
class Settings:
|
|
"""应用配置类"""
|
|
|
|
def __init__(self):
|
|
# 阿里云百炼AI (DASHSCOPE) API Key - 必须设置,无默认值
|
|
self.DASHSCOPE_API_KEY: Optional[str] = os.getenv("DASHSCOPE_API_KEY")
|
|
|
|
# 阿里云短信服务配置 - 必须设置,无默认值
|
|
self.SMS_ACCESS_KEY_ID: Optional[str] = os.getenv("SMS_ACCESS_KEY_ID")
|
|
self.SMS_ACCESS_KEY_SECRET: Optional[str] = os.getenv("SMS_ACCESS_KEY_SECRET")
|
|
self.SMS_SIGN_NAME: str = os.getenv("SMS_SIGN_NAME", "甲辰藏品")
|
|
self.SMS_TEMPLATE_CODE: str = os.getenv("SMS_TEMPLATE_CODE", "SMS_xxx")
|
|
|
|
# 数据库配置 - 必须设置,无默认值
|
|
self.DATABASE_URL: Optional[str] = os.getenv("DATABASE_URL")
|
|
|
|
# JWT配置
|
|
self.SECRET_KEY: str = os.getenv("SECRET_KEY") # 必须设置,无默认值
|
|
self.ALGORITHM: str = os.getenv("ALGORITHM", "HS256")
|
|
self.ACCESS_TOKEN_EXPIRE_MINUTES: int = int(os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "10080")) # 7天
|
|
|
|
# OSS配置 - 必须设置,无默认值
|
|
self.OSS_ACCESS_KEY_ID: Optional[str] = os.getenv("OSS_ACCESS_KEY_ID")
|
|
self.OSS_ACCESS_KEY_SECRET: Optional[str] = os.getenv("OSS_ACCESS_KEY_SECRET")
|
|
self.OSS_BUCKET: str = os.getenv("OSS_BUCKET", "jiachenlong-oss")
|
|
self.OSS_ENDPOINT: str = os.getenv("OSS_ENDPOINT", "oss-cn-hangzhou.aliyuncs.com")
|
|
|
|
# Redis配置 (可选,用于限流和缓存)
|
|
self.REDIS_URL: Optional[str] = os.getenv("REDIS_URL")
|
|
|
|
# API Rate Limiting
|
|
self.RATE_LIMIT_ENABLED: bool = os.getenv("RATE_LIMIT_ENABLED", "true").lower() == "true"
|
|
self.RATE_LIMIT_SMS_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_SMS_PER_MINUTE", "3"))
|
|
self.RATE_LIMIT_OCR_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_OCR_PER_MINUTE", "10"))
|
|
self.RATE_LIMIT_BATCH_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_BATCH_PER_MINUTE", "5"))
|
|
self.RATE_LIMIT_API_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_API_PER_MINUTE", "60"))
|
|
|
|
# 管理员账号 - 必须设置,无默认值
|
|
self.ADMIN_USERNAME: Optional[str] = os.getenv("ADMIN_USERNAME")
|
|
self.ADMIN_PASSWORD: Optional[str] = os.getenv("ADMIN_PASSWORD")
|
|
|
|
def get_dashscope_api_key(self) -> str:
|
|
"""获取阿里云百炼API Key"""
|
|
if not self.DASHSCOPE_API_KEY:
|
|
raise ValueError("DASHSCOPE_API_KEY 环境变量未设置")
|
|
return self.DASHSCOPE_API_KEY
|
|
|
|
def get_sms_config(self) -> dict:
|
|
"""获取短信配置"""
|
|
return {
|
|
"access_key_id": self.SMS_ACCESS_KEY_ID,
|
|
"access_key_secret": self.SMS_ACCESS_KEY_SECRET,
|
|
"sign_name": self.SMS_SIGN_NAME,
|
|
"template_code": self.SMS_TEMPLATE_CODE,
|
|
}
|
|
|
|
|
|
@lru_cache()
|
|
def get_settings() -> Settings:
|
|
"""获取单例配置实例"""
|
|
return Settings()
|
|
|
|
|
|
# 导出便捷访问
|
|
settings = get_settings()
|