Files
2026-10-16 13:51:00 +08:00

83 lines
2.4 KiB
Python
Raw Permalink 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.
"""应用配置:环境变量(.env)+ 业务参数(config.yaml)"""
from functools import lru_cache
from pathlib import Path
from typing import Any
import yaml
from pydantic_settings import BaseSettings, SettingsConfigDict
BASE_DIR = Path(__file__).resolve().parent.parent # server/
class Settings(BaseSettings):
"""环境配置(连接串、密钥等,均不入库)"""
model_config = SettingsConfigDict(
env_file=BASE_DIR / ".env", env_file_encoding="utf-8", extra="ignore"
)
# 服务
app_env: str = "dev"
app_host: str = "0.0.0.0"
app_port: int = 8000
# 数据库 / Redis
database_url: str = "mysql+aiomysql://root:root@127.0.0.1:3306/video?charset=utf8mb4"
redis_url: str = "redis://127.0.0.1:6379/0"
celery_broker_url: str = "redis://127.0.0.1:6379/1"
celery_result_backend: str = "redis://127.0.0.1:6379/2"
# JWT
jwt_secret: str = "please-change-me-in-production"
jwt_algorithm: str = "HS256"
access_token_ttl: int = 2 * 3600
refresh_token_ttl: int = 30 * 24 * 3600
admin_token_ttl: int = 12 * 3600
# 对象存储
oss_endpoint: str = ""
oss_bucket: str = ""
oss_access_key_id: str = ""
oss_access_key_secret: str = ""
# 支付渠道
alipay_app_id: str = ""
alipay_private_key: str = ""
alipay_public_key: str = ""
alipay_notify_url: str = ""
alipay_return_url: str = ""
wechat_mchid: str = ""
wechat_app_id: str = ""
wechat_api_v3_key: str = ""
wechat_private_key: str = ""
wechat_cert_serial_no: str = "" # 商户 API 证书序列号
wechat_platform_cert: str = "" # 微信支付平台证书(PEM,回调验签用)
wechat_notify_url: str = ""
wechat_api_base: str = "https://api.mch.weixin.qq.com"
tron_api_key: str = ""
# 短信(短信宝)/ 邮件
smsbao_username: str = ""
smsbao_api_key: str = ""
sms_sign_name: str = "【followwin】"
smtp_host: str = ""
smtp_port: int = 465
smtp_user: str = ""
smtp_password: str = ""
@lru_cache
def get_settings() -> Settings:
return Settings()
@lru_cache
def get_biz_config() -> dict[str, Any]:
"""业务参数(积分/会员/激励等默认值,后台 system_configs 可覆盖部分项)"""
with open(BASE_DIR / "config.yaml", encoding="utf-8") as f:
return yaml.safe_load(f) or {}
settings = get_settings()
biz_config = get_biz_config()