提交 0fe2f336 authored 作者: lidongxu's avatar lidongxu

设置生产和开发环境的变量

上级 ea335516
""" """
配置管理模块 配置管理模块
负责读取和管理应用配置 负责读取和管理应用配置
通过环境变量 ENV=development|production 自动区分开发/生产环境
""" """
import os import os
...@@ -11,20 +12,38 @@ from dotenv import load_dotenv ...@@ -11,20 +12,38 @@ from dotenv import load_dotenv
_env_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env') _env_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env')
load_dotenv(dotenv_path=_env_path) load_dotenv(dotenv_path=_env_path)
# 环境标识:development | production,未设置时默认为开发环境
_ENV = os.getenv("ENV", "development").strip().lower()
IS_PRODUCTION = _ENV == "production"
IS_DEV = not IS_PRODUCTION
def _db_var(key: str, dev_default: str, prod_default: str = "") -> str:
"""按环境读取数据库相关变量:生产环境优先读 PROD_DB_*,否则读 DB_*"""
if IS_PRODUCTION:
return os.getenv(f"PROD_DB_{key}", os.getenv(f"DB_{key}", prod_default)) or prod_default
return os.getenv(f"DB_{key}", dev_default)
class Config: class Config:
"""应用配置类""" """应用配置类"""
# 服务器配置 # 环境
ENV: str = _ENV
IS_PRODUCTION: bool = IS_PRODUCTION
IS_DEV: bool = IS_DEV
# 服务器配置(生产环境默认关闭 DEBUG)
HOST: str = os.getenv("HOST", "0.0.0.0") HOST: str = os.getenv("HOST", "0.0.0.0")
PORT: int = int(os.getenv("PORT", "8000")) PORT: int = int(os.getenv("PORT", "8000"))
DEBUG: bool = os.getenv("DEBUG", "False").lower() == "true" DEBUG: bool = os.getenv("DEBUG", "false" if IS_PRODUCTION else "true").lower() == "true"
# 数据库配置 # 数据库配置:开发用 DB_*,生产用 PROD_DB_*(或系统环境变量覆盖)
DB_HOST: str = os.getenv("DB_HOST", "localhost") DB_HOST: str = _db_var("HOST", "localhost")
DB_PORT: int = int(os.getenv("DB_PORT", "3306")) DB_PORT: int = int(_db_var("PORT", "3306"))
DB_USER: str = os.getenv("DB_USER", "root") DB_USER: str = _db_var("USER", "root")
DB_PASSWORD: str = os.getenv("DB_PASSWORD", "") DB_PASSWORD: str = _db_var("PASSWORD", "")
DB_NAME: str = os.getenv("DB_NAME", "clean_data") DB_NAME: str = _db_var("NAME", "clean_data")
# 日志配置 # 日志配置
LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO") LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO")
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论