from flask import Flask from flask_login import LoginManager from config import Config import redis login_manager = LoginManager() redis_client = None def create_app(): app = Flask(__name__) app.config.from_object(Config) # 导入并初始化 db from models import db db.init_app(app) # 初始化登录管理器 login_manager.init_app(app) login_manager.login_view = 'auth.login' # 用户加载器 @login_manager.user_loader def load_user(user_id): from models import User return User.query.get(int(user_id)) # 初始化Redis global redis_client try: redis_client = redis.Redis( host=app.config['REDIS_HOST'], port=app.config['REDIS_PORT'], db=app.config['REDIS_DB'], password=app.config['REDIS_PASSWORD'], decode_responses=True ) # 测试连接 redis_client.ping() print("[OK] Redis连接成功") except Exception as e: print(f"[ERROR] Redis连接失败: {e}") print("提示: 请确保Redis服务已启动") redis_client = None # 注册蓝图 from routes.auth import auth_bp from routes.parser import parser_bp from routes.admin import admin_bp from routes.main import main_bp from routes.api_v1 import api_v1_bp from routes.apikey import apikey_bp app.register_blueprint(auth_bp, url_prefix='/auth') app.register_blueprint(parser_bp, url_prefix='/api') app.register_blueprint(admin_bp, url_prefix='/admin') app.register_blueprint(main_bp) app.register_blueprint(api_v1_bp) # /api/v1/* app.register_blueprint(apikey_bp) # /user/apikey/* # 初始化定时任务(仅在非调试模式或主进程中启动) # 注意:初始化脚本运行时不启动调度器 import os if os.environ.get('SKIP_SCHEDULER') != 'true': if not app.debug or os.environ.get('WERKZEUG_RUN_MAIN') == 'true': try: from scheduler import init_scheduler init_scheduler(app) except Exception as e: print(f"定时任务启动失败: {e}") return app if __name__ == '__main__': app = create_app() app.run(debug=True, host='0.0.0.0', port=5000)