Program/mooc/core/config.py
?..濡.. 8451ad034c 1.统一CRUD操作
2.完成登录部分接口
3.暂时挂载本地图片链接作为头像存储
2025-03-04 20:36:52 +08:00

100 lines
3.4 KiB
Python

from pydantic_settings import BaseSettings
from typing import Optional, Dict, Any, List
import os
import logging
# 创建一个基本的配置日志记录器
config_logger = logging.getLogger("config")
if not config_logger.handlers:
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
))
config_logger.addHandler(handler)
config_logger.setLevel(logging.INFO)
class Settings(BaseSettings):
PROJECT_NAME: str = "ExamService"
VERSION: str = "1.0.0"
API_V1_STR: str = "/api/v1"
MYSQL_USER: str = "mooc"
MYSQL_PASSWORD: str = "CzHkA6JFCL5hznhP"
MYSQL_HOST: str = "localhost"
MYSQL_PORT: str = "3306"
MYSQL_DATABASE: str = "mooc"
SQLALCHEMY_DATABASE_URI: Optional[str] = None
SQLALCHEMY_ECHO: bool = False
SECRET_KEY: str = "your-secret-key-here"
ALGORITHM: str = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
WECHAT_APPID: str = ""
WECHAT_APPSECRET: str = ""
WECHAT_UNIACID: int = 1
# 日志配置
LOG_DIR: str = "logs"
LOG_NAME: str = "exam_service"
LOG_LEVEL: int = logging.DEBUG
LOG_MAX_SIZE: int = 10 * 1024 * 1024 # 10MB
LOG_BACKUP_COUNT: int = 5
ENVIRONMENT: str = "development" # development, testing, production
BASE_URL: str = "http://127.0.0.1:2333"
UPLOAD_IMG_DIR: str = "upload/images"
ATTACH_URL: str = "/attachment/" # 用于构建返回的文件URL
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 设置数据库URI
self.SQLALCHEMY_DATABASE_URI = (
f"mysql+pymysql://{self.MYSQL_USER}:{self.MYSQL_PASSWORD}"
f"@{self.MYSQL_HOST}:{self.MYSQL_PORT}/{self.MYSQL_DATABASE}"
)
# 确保上传目录为绝对路径并存在
self._setup_upload_directory()
def _setup_upload_directory(self):
"""确保上传目录为绝对路径且存在"""
# 首先记录初始值,便于诊断
config_logger.info(f"初始上传目录配置: {self.UPLOAD_IMG_DIR}")
# 确保没有前导斜杠,避免被误判为绝对路径
if self.UPLOAD_IMG_DIR.startswith('/'):
self.UPLOAD_IMG_DIR = self.UPLOAD_IMG_DIR[1:]
config_logger.info(f"移除前导斜杠: {self.UPLOAD_IMG_DIR}")
# 规范化路径分隔符
self.UPLOAD_IMG_DIR = os.path.normpath(self.UPLOAD_IMG_DIR)
# 现在正确判断并处理绝对路径
if not os.path.isabs(self.UPLOAD_IMG_DIR):
# 获取当前工作目录的绝对路径
current_dir = os.path.abspath(os.getcwd())
config_logger.info(f"当前工作目录: {current_dir}")
# 安全地拼接路径
self.UPLOAD_IMG_DIR = os.path.join(current_dir, self.UPLOAD_IMG_DIR)
config_logger.info(f"转换上传目录为绝对路径: {self.UPLOAD_IMG_DIR}")
# 确保目录存在
if not os.path.exists(self.UPLOAD_IMG_DIR):
os.makedirs(self.UPLOAD_IMG_DIR, exist_ok=True)
config_logger.info(f"创建上传目录: {self.UPLOAD_IMG_DIR}")
else:
config_logger.info(f"上传目录已存在: {self.UPLOAD_IMG_DIR}")
# 记录最终的上传目录路径
config_logger.info(f"上传文件将保存到: {self.UPLOAD_IMG_DIR}")
class Config:
env_file = ".env"
settings = Settings()