config.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import os
  2. from dotenv import load_dotenv
  3. # 加载项目根目录下的 .env 文件
  4. env_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), '.env')
  5. load_dotenv(env_path, interpolate=True)
  6. basedir = os.path.abspath(os.path.dirname(__file__))
  7. def _build_database_uri():
  8. """从 .env 中的独立配置项拼接 DATABASE_URL"""
  9. user = os.environ.get('DB_USER', '')
  10. password = os.environ.get('DB_PASSWORD', '')
  11. host = os.environ.get('DB_HOST', '')
  12. port = os.environ.get('DB_PORT', '5432')
  13. name = os.environ.get('DB_NAME', '')
  14. if all([user, password, host, name]):
  15. return f'postgresql://{user}:{password}@{host}:{port}/{name}'
  16. return os.environ.get('DATABASE_URL', '')
  17. class Config:
  18. APP_NAME = os.environ.get('APP_NAME', '路桥采集平台')
  19. SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
  20. SQLALCHEMY_DATABASE_URI = _build_database_uri() or \
  21. 'sqlite:///' + os.path.join(basedir, 'app.db')
  22. SQLALCHEMY_TRACK_MODIFICATIONS = False
  23. # JWT 配置(用于本地 Token 签发)
  24. JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY') or 'jwt-secret-change-me'
  25. JWT_ACCESS_TOKEN_EXPIRES = 1200 # 20 分钟
  26. JWT_REFRESH_TOKEN_EXPIRES = 86400 # 24 小时
  27. # SSO 统一认证配置
  28. SSO_BASE_URL = os.environ.get('SSO_BASE_URL', 'http://192.168.92.61:8200')
  29. SSO_CLIENT_ID = os.environ.get('SSO_CLIENT_ID', '')
  30. SSO_CLIENT_SECRET = os.environ.get('SSO_CLIENT_SECRET', '')
  31. SSO_REDIRECT_URI = os.environ.get('SSO_REDIRECT_URI', 'http://localhost:5000/auth/callback')
  32. SSO_FRONTEND_URL = os.environ.get('SSO_FRONTEND_URL', 'http://localhost:5000')
  33. SSO_SCOPE = os.environ.get('SSO_SCOPE', 'email')
  34. SSO_LOGOUT_REDIRECT_URL = os.environ.get('SSO_LOGOUT_REDIRECT_URL', 'http://192.168.92.61:9200/login')
  35. # 样本中心配置
  36. SAMPLE_CENTER_BASE_URL = os.environ.get('SAMPLE_CENTER_BASE_URL', 'http://192.168.92.61')
  37. SAMPLE_CENTER_APP_ID = os.environ.get('SAMPLE_CENTER_APP_ID', '')
  38. SAMPLE_CENTER_APP_SECRET = os.environ.get('SAMPLE_CENTER_APP_SECRET', '')