Files
JieXi/app.py
2025-11-30 19:49:25 +08:00

76 lines
2.2 KiB
Python

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)