82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
"""
|
||
应用配置管理
|
||
"""
|
||
from pydantic_settings import BaseSettings
|
||
from typing import List
|
||
from urllib.parse import quote_plus
|
||
import os
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
"""应用配置类"""
|
||
|
||
# 应用信息
|
||
APP_NAME: str = "NEX Docus"
|
||
APP_VERSION: str = "1.0.0"
|
||
DEBUG: bool = True
|
||
|
||
# 服务器配置
|
||
HOST: str = "0.0.0.0"
|
||
PORT: int = 8000
|
||
|
||
# 数据库配置
|
||
DB_HOST: str
|
||
DB_PORT: int = 3306
|
||
DB_USER: str
|
||
DB_PASSWORD: str
|
||
DB_NAME: str
|
||
DB_CHARSET: str = "utf8mb4"
|
||
|
||
@property
|
||
def DATABASE_URL(self) -> str:
|
||
"""数据库连接URL"""
|
||
# URL 编码密码,防止特殊字符导致解析错误
|
||
password = quote_plus(self.DB_PASSWORD)
|
||
return f"mysql+aiomysql://{self.DB_USER}:{password}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}?charset={self.DB_CHARSET}"
|
||
|
||
@property
|
||
def SYNC_DATABASE_URL(self) -> str:
|
||
"""同步数据库连接URL(用于 Alembic)"""
|
||
# URL 编码密码
|
||
password = quote_plus(self.DB_PASSWORD)
|
||
return f"mysql+pymysql://{self.DB_USER}:{password}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}?charset={self.DB_CHARSET}"
|
||
|
||
# Redis 配置
|
||
REDIS_HOST: str
|
||
REDIS_PORT: int = 6379
|
||
REDIS_PASSWORD: str
|
||
REDIS_DB: int = 8
|
||
|
||
@property
|
||
def REDIS_URL(self) -> str:
|
||
"""Redis 连接URL"""
|
||
return f"redis://:{self.REDIS_PASSWORD}@{self.REDIS_HOST}:{self.REDIS_PORT}/{self.REDIS_DB}"
|
||
|
||
# JWT 配置
|
||
SECRET_KEY: str
|
||
ALGORITHM: str = "HS256"
|
||
ACCESS_TOKEN_EXPIRE_MINUTES: int = 1440 # 24小时
|
||
|
||
# 用户配置
|
||
DEFAULT_USER_PASSWORD: str = "User@123456" # 新用户默认密码
|
||
|
||
# 文件存储配置
|
||
STORAGE_ROOT: str = "/data/nex_docus_store"
|
||
PROJECTS_PATH: str = "/data/nex_docus_store/projects"
|
||
TEMP_PATH: str = "/data/nex_docus_store/temp"
|
||
|
||
# 跨域配置
|
||
CORS_ORIGINS: List[str] = ["http://localhost:5173", "http://localhost:3000"]
|
||
|
||
# 日志配置
|
||
LOG_LEVEL: str = "INFO"
|
||
LOG_PATH: str = "logs"
|
||
|
||
class Config:
|
||
env_file = ".env"
|
||
case_sensitive = True
|
||
|
||
|
||
# 创建配置实例
|
||
settings = Settings()
|