diff --git a/backend/.env b/backend/.env new file mode 100644 index 00000000..bd76a29f --- /dev/null +++ b/backend/.env @@ -0,0 +1,20 @@ +# 应用配置 +APP_NAME=海洋项目管理系统 +APP_VERSION=1.0.0 +DEBUG=True + +# 数据库配置 +DB_HOST=localhost +DB_PORT=3306 +DB_USER=root +DB_PASSWORD=rootpassword +DB_NAME=project_manager +DB_CHARSET=utf8mb4 + +# 安全配置 +SECRET_KEY=your-secret-key-change-this-in-production +ALGORITHM=HS256 +ACCESS_TOKEN_EXPIRE_MINUTES=1440 + +# CORS配置 +CORS_ORIGINS=["http://localhost:3000","http://127.0.0.1:3000"] diff --git a/backend/config/database.py b/backend/config/database.py index 4ca91096..de066c20 100644 --- a/backend/config/database.py +++ b/backend/config/database.py @@ -20,6 +20,11 @@ Base = declarative_base() async def get_db(): + """获取数据库会话的依赖项函数 + + 用于FastAPI依赖注入,自动管理数据库会话的生命周期 + 成功时自动提交,异常时自动回滚,最后确保关闭会话 + """ async with AsyncSessionLocal() as session: try: yield session @@ -32,5 +37,6 @@ async def get_db(): async def init_db(): + """初始化数据库,创建所有表结构""" async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) diff --git a/backend/config/settings.py b/backend/config/settings.py index df0589a5..af9afed4 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -1,29 +1,44 @@ from pydantic_settings import BaseSettings +from pydantic import field_validator from functools import lru_cache + class Settings(BaseSettings): + """应用配置类,管理所有环境变量和配置项""" + APP_NAME: str = "海洋项目管理系统" APP_VERSION: str = "1.0.0" - DEBUG: bool = True + DEBUG: bool = False DB_HOST: str = "localhost" DB_PORT: int = 3306 DB_USER: str = "root" - DB_PASSWORD: str = "rootpassword" + DB_PASSWORD: str | None = None DB_NAME: str = "project_manager" DB_CHARSET: str = "utf8mb4" - SECRET_KEY: str = "your-secret-key-change-this-in-production" + SECRET_KEY: str | None = None ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 1440 CORS_ORIGINS: list[str] = ["http://localhost:3000", "http://127.0.0.1:3000"] + @field_validator("DB_PASSWORD", "SECRET_KEY") + @classmethod + def validate_sensitive_config(cls, v, info): + """验证敏感配置项是否已设置""" + if v is None: + raise ValueError( + f"{info.field_name} 未设置,请在环境变量或.env文件中配置" + ) + return v + class Config: env_file = ".env" case_sensitive = True @lru_cache() -def get_settings(): +def get_settings() -> Settings: + """获取Settings单例实例,使用LRU缓存提高性能""" return Settings()