83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
import os
|
|
from datetime import timedelta
|
|
|
|
class Config:
|
|
"""
|
|
基础配置类
|
|
包含所有环境通用的配置项
|
|
"""
|
|
|
|
# Flask基础配置
|
|
SECRET_KEY = os.environ.get('SECRET_KEY')
|
|
if not SECRET_KEY:
|
|
raise ValueError("SECRET_KEY 环境变量未设置")
|
|
|
|
# 数据库配置
|
|
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
|
|
|
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
|
SQLALCHEMY_ENGINE_OPTIONS = {
|
|
'pool_pre_ping': True,
|
|
'pool_recycle': 300,
|
|
}
|
|
|
|
# OpenAI兼容API配置
|
|
LLM_API_URL = os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1'
|
|
LLM_API_KEY = os.environ.get('LLM_API_KEY') or 'sk-your-api-key-here'
|
|
|
|
# 微信小程序配置
|
|
WX_APPID = os.environ.get('WX_APPID') or 'wx-your-appid-here'
|
|
WX_SECRET = os.environ.get('WX_SECRET') or 'your-wx-secret-here'
|
|
|
|
# 跨域配置
|
|
CORS_ORIGINS = os.environ.get('CORS_ORIGINS', '*').split(',')
|
|
|
|
# 日志配置
|
|
LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO')
|
|
LOG_FILE = os.environ.get('LOG_FILE', 'logs/app.log')
|
|
|
|
# 缓存配置
|
|
CACHE_TYPE = os.environ.get('CACHE_TYPE', 'simple')
|
|
CACHE_DEFAULT_TIMEOUT = int(os.environ.get('CACHE_DEFAULT_TIMEOUT', 300))
|
|
|
|
# 会话配置
|
|
PERMANENT_SESSION_LIFETIME = timedelta(
|
|
hours=int(os.environ.get('SESSION_LIFETIME_HOURS', 24))
|
|
)
|
|
|
|
# 文件上传配置
|
|
MAX_CONTENT_LENGTH = int(os.environ.get('MAX_CONTENT_LENGTH', 16 * 1024 * 1024)) # 16MB
|
|
UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', 'uploads')
|
|
|
|
# 安全配置
|
|
WTF_CSRF_ENABLED = os.environ.get('WTF_CSRF_ENABLED', 'True').lower() == 'true'
|
|
WTF_CSRF_TIME_LIMIT = int(os.environ.get('WTF_CSRF_TIME_LIMIT', 3600))
|
|
|
|
@staticmethod
|
|
def init_app(app):
|
|
"""
|
|
初始化应用配置
|
|
"""
|
|
# 创建必要的目录
|
|
os.makedirs('logs', exist_ok=True)
|
|
os.makedirs('uploads', exist_ok=True)
|
|
|
|
# 配置日志
|
|
import logging
|
|
from logging.handlers import RotatingFileHandler
|
|
|
|
if not app.debug and not app.testing:
|
|
file_handler = RotatingFileHandler(
|
|
Config.LOG_FILE,
|
|
maxBytes=10240000,
|
|
backupCount=10
|
|
)
|
|
file_handler.setFormatter(logging.Formatter(
|
|
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
|
|
))
|
|
file_handler.setLevel(logging.INFO)
|
|
app.logger.addHandler(file_handler)
|
|
|
|
app.logger.setLevel(logging.INFO)
|
|
app.logger.info('应用启动')
|