# -*- coding = utf-8 -*- # @Time : 2025/2/12 下午4:55 # @File : config.py # @Software : PyCharm # @Author : xingc # @Desc : import logging import os from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8') # 基础设置 NAME: str = 'card book' PREFIX: str = NAME.lower().replace(' ', '_') ENVIRONMENT: str = 'development' BASE_DIR: str = os.path.dirname(os.path.abspath(__file__)) DEBUG: bool = True # 应用配置 ALLOWED_ORIGINS: str = 'http://127.0.0.1:3000,http://localhost:3000' # 日志配置 LOG_LEVEL: int = logging.DEBUG # 数据库配置 DB_USER: str DB_PASSWORD: str DB_HOST: str DB_PORT: int = 3306 DB_NAME: str DB_SCHEMA: str = "mysql+aiomysql" DB_POOL_SIZE: int = 30 # 指定单个数据库url DB_URL: str | None = None # redis配置 REDIS_PASSWORD: str REDIS_HOST: str REDIS_PORT: int = 6379 REDIS_DB: int = 0 REDIS_CACHE_EXPIRATION_SECONDS: int = 60 * 30 * 1 # 身份认证 ACCESS_SECRET_KEY: str = 'a2f718e8313bf8efcb45ef7364d040c45800f34d10f65776eef0f6584677ecd0' REFRESH_SECRET_KEY: str = 'bb0cbf245de98c09c42c928326f6e07a44d91bc5a81787b37b4eb33428915fa7' ALGORITHM: str = 'HS256' ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7 # 文件上传配置 UPLOADED_FILES_DIR: str = os.path.join(BASE_DIR, 'uploads') UPLOADED_ALLOWED_MIME_TYPES: set = { "image/jpeg", "image/png" } UPLOADED_MAX_FILE_SIZE: int = 1024 * 1024 * 10 # 10MB # 代理 OVERSEAS_PROXY: str = 'http://127.0.0.1:7890' # 微信 APPID: str = '' APP_SECRET: str = '' class ProductionSettings(Settings): # 基础设置 ENVIRONMENT: str = 'production' DEBUG: bool = False # 身份认证 ACCESS_SECRET_KEY: str = '1f790219840ccd10b5d8b33d7f595b7fe0eed262403689f6fa1cab80149b00f2' REFRESH_SECRET_KEY: str = 'fb57c85dc4e0256024ae809bc3200adc7b7de222b348da6df35d58e27338e3b8' ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 1 # 1days class DevelopmentSettings(Settings): # 应用配置 ALLOWED_ORIGINS: str = 'http://127.0.0.1:3000,http://localhost:3000' # 日志配置 LOG_LEVEL: int = logging.INFO # 数据库配置 DB_USER: str = 'card_book' DB_PASSWORD: str = 'DFCPjk4rdkca6SPE' DB_HOST: str = '192.168.3.4' DB_NAME: str = 'card_book' # redis配置 REDIS_PASSWORD: str = 'xingc' REDIS_HOST: str = '192.168.3.4' REDIS_PORT: int = 6379 REDIS_DB: int = 0 def get_settings(): env = os.environ.get('ENVIRONMENT', 'development') if env == 'development': return DevelopmentSettings() elif env == 'production': return ProductionSettings() return Settings() settings = get_settings() LOGGING_CONFIG: dict = { "version": 1, "disable_existing_loggers": False, "formatters": { "standard": {"format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s"}, }, "handlers": { "default": { "level": settings.LOG_LEVEL, "formatter": "standard", "class": "logging.StreamHandler", "stream": "ext://sys.stdout", }, }, "loggers": { "": {"handlers": ["default"], "level": settings.LOG_LEVEL, "propagate": False}, "uvicorn": { "handlers": ["default"], "level": logging.ERROR, "propagate": False, }, }, }