72 lines
2.1 KiB
Python
72 lines
2.1 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
|
|
|
|
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)
|
|
|
|
# 初始化定时任务(仅在非调试模式或主进程中启动)
|
|
# 注意:初始化脚本运行时不启动调度器
|
|
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)
|