75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
"""全局配置:从 .env 读取,Pydantic v2 settings 风格。"""
|
|||
|
|
|
||
|
|
from functools import lru_cache
|
||
|
|
|
||
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
|
|
|
||
|
|
|
||
|
|
class Settings(BaseSettings):
|
||
|
|
model_config = SettingsConfigDict(
|
||
|
|
env_file=".env",
|
||
|
|
env_file_encoding="utf-8",
|
||
|
|
extra="ignore",
|
||
|
|
case_sensitive=False,
|
||
|
|
)
|
||
|
|
|
||
|
|
# ---------- 应用 ----------
|
||
|
|
APP_NAME: str = "沃林学生管理系统"
|
||
|
|
APP_DESC: str = "基于 FastAPI + SQLAlchemy 2.0 + MySQL 的教务管理系统"
|
||
|
|
VERSION: str = "1.0.0"
|
||
|
|
DEBUG: bool = True
|
||
|
|
|
||
|
|
# ---------- 数据库 ----------
|
||
|
|
DB_DRIVER: str = "mysql+pymysql" # mysql+pymysql | sqlite
|
||
|
|
DB_HOST: str = "127.0.0.1"
|
||
|
|
DB_PORT: int = 3306
|
||
|
|
DB_USER: str = "root"
|
||
|
|
DB_PASSWORD: str = "123456"
|
||
|
|
DB_NAME: str = "wolin_sms"
|
||
|
|
SQLITE_PATH: str = "./wolin_sms.db"
|
||
|
|
|
||
|
|
DB_ECHO: bool = False
|
||
|
|
DB_POOL_SIZE: int = 10
|
||
|
|
DB_POOL_RECYCLE: int = 3600
|
||
|
|
|
||
|
|
# ---------- 鉴权 ----------
|
||
|
|
JWT_SECRET: str = "wolin-sms-dev-secret-change-me"
|
||
|
|
JWT_ALGORITHM: str = "HS256"
|
||
|
|
JWT_EXPIRE_MINUTES: int = 720
|
||
|
|
AUTH_ENABLED: bool = True # 关闭后所有接口免登录(本地排错用)
|
||
|
|
|
||
|
|
# ---------- 初始管理员 ----------
|
||
|
|
ADMIN_USERNAME: str = "admin"
|
||
|
|
ADMIN_PASSWORD: str = "admin123"
|
||
|
|
|
||
|
|
# ---------- 业务规则 ----------
|
||
|
|
SCORE_PASS_LINE: float = 60.0 # 及格线
|
||
|
|
SCORE_WARN_LINE: float = 60.0 # 红线预警线(低于即标记"需重点关注")
|
||
|
|
HIGH_SALARY_LINE: float = 10000.0 # 高薪线
|
||
|
|
STU_NO_PREFIX: str = "WL" # 学号前缀
|
||
|
|
|
||
|
|
@property
|
||
|
|
def database_url(self) -> str:
|
||
|
|
if self.DB_DRIVER.startswith("sqlite"):
|
||
|
|
return f"sqlite:///{self.SQLITE_PATH}"
|
||
|
|
return (
|
||
|
|
f"{self.DB_DRIVER}://{self.DB_USER}:{self.DB_PASSWORD}"
|
||
|
|
f"@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}?charset=utf8mb4"
|
||
|
|
)
|
||
|
|
|
||
|
|
@property
|
||
|
|
def server_url_without_db(self) -> str:
|
||
|
|
"""用于首次自动建库(数据库还不存在时)。"""
|
||
|
|
return (
|
||
|
|
f"{self.DB_DRIVER}://{self.DB_USER}:{self.DB_PASSWORD}"
|
||
|
|
f"@{self.DB_HOST}:{self.DB_PORT}/?charset=utf8mb4"
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
@lru_cache
|
||
|
|
def get_settings() -> Settings:
|
||
|
|
return Settings()
|
||
|
|
|
||
|
|
|
||
|
|
settings = get_settings()
|