| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- from pydantic_settings import BaseSettings
- from typing import Optional
- from pathlib import Path
- class Settings(BaseSettings):
- """应用配置"""
- # 应用基础配置
- APP_NAME: str = "叁强鲜配"
- DEBUG: bool = True
- API_V1_PREFIX: str = "/api"
- # 数据库配置
- DATABASE_URL: str = "mysql+pymysql://root:password@localhost:3306/sanqiang"
- # JWT配置
- SECRET_KEY: str = "your-secret-key-change-in-production-please-use-random-string"
- ALGORITHM: str = "HS256"
- ACCESS_TOKEN_EXPIRE_MINUTES: int = 30 * 24 # 30天
- # CORS配置
- BACKEND_CORS_ORIGINS: list = [
- "http://localhost:5173", # art-design-pro 开发服务器
- "http://localhost:8080",
- "http://localhost:8081", # uni-app H5 端口被占用时常用
- "http://localhost:8082",
- "http://127.0.0.1:5173",
- "http://127.0.0.1:8080",
- "http://127.0.0.1:8081",
- "http://127.0.0.1:8082",
- "http://localhost:3000", # Web开发
- "http://localhost:3006", # Web开发
- "http://127.0.0.1:3000",
- "http://127.0.0.1:3006",
- ]
- # 文件存储配置
- STORAGE_TYPE: str = "local" # local, qiniu, oss, minio
- # 本地存储配置
- LOCAL_UPLOAD_DIR: str = "uploads"
- LOCAL_STORAGE_URL: str = "/uploads"
- # Redis 配置(用于登录会话与 refreshToken 吊销)
- # 未配置 REDIS_HOST 时,后端会保持兼容:仍然只校验 JWT,不强制会话吊销。
- REDIS_HOST: str = ""
- REDIS_PORT: int = 6379
- REDIS_DB: int = 0
- REDIS_PASSWORD: str = ""
- REDIS_TIMEOUT_SEC: int = 30
- REDIS_SSL_ENABLED: bool = False
- # 七牛云存储配置 (生产环境推荐)
- QINIU_ACCESS_KEY: str = ""
- QINIU_SECRET_KEY: str = ""
- QINIU_BUCKET: str = ""
- QINIU_DOMAIN: str = ""
- # 阿里云OSS配置 (可选)
- OSS_ACCESS_KEY_ID: str = ""
- OSS_ACCESS_KEY_SECRET: str = ""
- OSS_BUCKET: str = ""
- OSS_ENDPOINT: str = ""
- OSS_DOMAIN: str = ""
- # MinIO配置
- MINIO_ENDPOINT: str = ""
- MINIO_ACCESS_KEY: str = ""
- MINIO_SECRET_KEY: str = ""
- MINIO_BUCKET: str = ""
- MINIO_SECURE: bool = False
- MINIO_BASE_URL: str = ""
- # 微信支付配置 (生产环境必需)
- WXPAY_MCHID: str = "" # 商户号
- WXPAY_APPID: str = "" # 公众号AppID
- WXPAY_MINI_APPID: str = "" # 小程序AppID
- WXPAY_API_KEY: str = "" # API密钥 (V2)
- WXPAY_SANDBOX: bool = False # 是否使用沙箱环境
- WXPAY_NOTIFY_URL: str = "https://your-domain.com/api/payment/notify" # 支付回调地址
- WXPAY_REFUND_NOTIFY_URL: str = "https://your-domain.com/api/payment/refund-notify" # 退款回调地址
- # V3 API 证书配置
- WXPAY_CERT_PATH: str = "" # API证书(apiclient_cert.pem)路径
- WXPAY_PRIVATE_KEY_PATH: str = "" # API私钥(apiclient_key.pem)路径
- WXPAY_SERIAL_NO: str = "" # 证书序列号
- # SSL证书配置 (退款必需)
- WXPAY_SSL_CERT: str = "" # SSL证书路径
- WXPAY_SSL_KEY: str = "" # SSL私钥路径
- # 微信小程序配置
- WXPAY_SECRET: str = "" # 小程序Secret
- # 微信模板消息ID配置
- WX_TEMPLATE_ORDER_STATUS: str = "" # 订单状态通知模板ID
- WX_TEMPLATE_DELIVERY_NOTICE: str = "" # 配送通知模板ID
- WX_TEMPLATE_PAYMENT_SUCCESS: str = "" # 支付成功通知模板ID
- WX_TEMPLATE_REFUND_RESULT: str = "" # 退款结果通知模板ID
- WX_TEMPLATE_DELIVERY_WARNING: str = "" # 配送时效预警模板ID
- # 登录 RSA:私钥 PEM(多实例/负载均衡须配置同一私钥;留空则进程启动时临时生成,仅适合单机开发)
- LOGIN_RSA_PRIVATE_KEY_PEM: str = ""
- # 是否允许明文 username/password 登录(仅建议本地排障临时开启;生产务必 false)
- LOGIN_ALLOW_PLAINTEXT_LOGIN: bool = False
- # 加密载荷内时间戳允许偏差(秒),防简单重放
- LOGIN_ENCRYPT_TS_SKEW_SEC: int = 300
- # 临时文件目录
- TEMP_FILE_DIR: str = "temp_files"
- # 全量 API 请求日志(中间件写入 sys_api_request_log)
- API_REQUEST_LOG_ENABLED: bool = True
- API_REQUEST_LOG_MAX_BODY: int = 65536
- API_REQUEST_LOG_MAX_BODY_BYTES: int = 131072
- class Config:
- # 让配置文件从后端目录加载(不依赖你从仓库根目录还是 backend 目录启动服务)
- env_file = str(Path(__file__).resolve().parents[2] / ".env")
- case_sensitive = True
- settings = Settings()
|