From b869da6fe78d05d38222568656c97fbe78ecbbe5 Mon Sep 17 00:00:00 2001 From: huangzhuang_3rd Date: Mon, 1 Jun 2026 18:30:53 +0800 Subject: [PATCH] =?UTF-8?q?v1.8.0:=20=E6=A8=A1=E5=9D=97=E5=8C=96=E9=87=8D?= =?UTF-8?q?=E6=9E=84=20+=20=E5=90=8E=E5=8F=B0=E7=99=BB=E5=BD=95=E8=AE=A4?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 app.py diff --git a/app.py b/app.py new file mode 100644 index 0000000..81b0ebd --- /dev/null +++ b/app.py @@ -0,0 +1,95 @@ +""" +ParamHub - 参数百科 +AI大模型与硬件参数速查平台 +v1.8.0 - 模块化重构 + 后台登录认证 +""" +from flask import Flask, request, jsonify, session, redirect, url_for +from flask_cors import CORS +from datetime import timedelta + +from config import SECRET_KEY +from utils import load_config + +# ─── Flask 应用创建 ──────────────────────────────────────────── + +app = Flask(__name__, static_folder='static', static_url_path='/static') +CORS(app) + +app.secret_key = SECRET_KEY +app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=24) + +# ─── 全局认证拦截 ────────────────────────────────────────────── + +@app.before_request +def check_auth(): + """所有 POST/PUT/DELETE 请求需要登录(登录接口和阅读计数除外)""" + if request.method in ('POST', 'PUT', 'DELETE'): + # 登录接口本身不需要认证 + if request.path == '/login': + return None + # 阅读计数公开访问 + if request.path.endswith('/view'): + return None + # 检查 session + if not session.get('authenticated'): + if request.path.startswith('/api/'): + return jsonify({'error': '未登录,请先登录', 'redirect': '/login'}), 401 + return redirect(url_for('auth.login_page')) + return None + + +# ─── 注册蓝图 ────────────────────────────────────────────────── + +from auth import auth_bp +app.register_blueprint(auth_bp) + +from modules.routes.pages import pages_bp +app.register_blueprint(pages_bp) + +from modules.routes.api_models import models_bp +app.register_blueprint(models_bp) + +from modules.routes.api_gpus import gpus_bp +app.register_blueprint(gpus_bp) + +from modules.routes.api_cpus import cpus_bp +app.register_blueprint(cpus_bp) + +from modules.routes.api_categories import cat_bp +app.register_blueprint(cat_bp) + +from modules.routes.api_knowledge import knowledge_bp +app.register_blueprint(knowledge_bp) + +from modules.routes.api_items import items_bp +app.register_blueprint(items_bp) + +from modules.routes.api_smart import smart_bp +app.register_blueprint(smart_bp) + +from modules.routes.api_search import search_bp +app.register_blueprint(search_bp) + +from modules.routes.api_config import config_bp +app.register_blueprint(config_bp) + +from modules.routes.api_upload import upload_bp +app.register_blueprint(upload_bp) + +from modules.routes.api_pin import pin_bp +app.register_blueprint(pin_bp) + + +# ─── 启动 ────────────────────────────────────────────────────── + +if __name__ == '__main__': + print("=" * 50) + print("ParamHub - 参数百科 v1.8.0") + print("=" * 50) + print("模块化重构 + 后台登录认证") + print(f"访问地址: http://localhost:16031") + print(f"后台管理: http://localhost:16031/admin") + print(f"默认密码: admin123 (可在 config.json 中修改)") + print("=" * 50) + + app.run(host='0.0.0.0', port=16031, debug=False)