基于 Flask 的超图数据结构、语义和神经网络指标测评系统
web_app/
├── app.py # Flask 主应用(路由、上传、分析)
├── metrics_core.py # 核心计算模块(从 PyQt5 抽离的纯逻辑)
├── config.py # 配置文件
├── requirements.txt # Python 依赖
├── README.md # 本文件
│
├── data/ # 数据存储目录
│ └── users.json # 用户账号数据(简单存储)
│
├── uploads/ # 用户上传的文件
│ └── [username]/ # 按用户名分目录
│ └── [timestamp]/ # 按时间戳分目录
│
├── results/ # 分析结果存储
│ └── [username]/ # 按用户名分目录
│ └── [timestamp]/ # 按时间戳分目录
│
├── templates/ # Jinja2 模板
│ ├── base.html # 基础模板(导航栏、样式)
│ ├── login.html # 登录页
│ ├── index.html # 首页(上传和分析)
│ ├── result.html # 结果展示页
│ ├── history.html # 历史记录页
│ └── error.html # 错误页面
│
└── static/ # 静态文件(可选)
├── css/ # 自定义样式
├── js/ # 自定义脚本
└── img/ # 图片资源
Python 版本: Python 3.8+
# Linux/macOS
python3 -m venv venv
source venv/bin/activate
# Windows
python -m venv venv
venv\Scripts\activatepip install -r requirements.txt或手动安装核心依赖:
pip install flask werkzeug numpy scipy matplotlibpython app.py浏览器打开以下任一地址:
- 本地访问: http://localhost:8008/
- 局域网访问: http://10.159.23.17:8008/ (替换为你的服务器内网 IP)
- 用户名:
admin - 密码:
admin123
ssh ubuntu@10.159.23.17
# 密码: kk12345678# 方法1: 使用 scp
scp -r web_app ubuntu@10.159.23.17:~/
# 方法2: 使用 git
cd ~/
git clone <你的仓库地址>
cd HGbenchmark-GUI/web_app# 1. 进入项目目录
cd ~/web_app
# 2. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 3. 安装依赖
pip install -r requirements.txt
# 4. 启动服务(前台运行,测试用)
python app.py使用 nohup 让服务在后台运行:
nohup python app.py > app.log 2>&1 &查看日志:
tail -f app.log停止服务:
# 查找进程
ps aux | grep app.py
# 杀死进程
kill -9 <进程ID>创建服务文件 /etc/systemd/system/hypergraph-web.service:
[Unit]
Description=Hypergraph Benchmark Web Service
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/web_app
Environment="PATH=/home/ubuntu/web_app/venv/bin"
ExecStart=/home/ubuntu/web_app/venv/bin/python app.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload
sudo systemctl start hypergraph-web
sudo systemctl enable hypergraph-web # 开机自启
sudo systemctl status hypergraph-web # 查看状态- 简单的 session 会话管理
- 用户账号存储在
data/users.json - 支持添加新用户(修改 JSON 文件)
- 支持格式:
.txt(超图结构),.json(节点信息) - 超图结构文件格式: 每行一个超边,节点以空格分隔
1 2 3 2 4 5 6 - 节点信息文件格式: JSON 格式
{ "1": {"label": "A", "name": "Node1"}, "2": {"label": "B", "name": "Node2"} }
- 基础统计: 节点数、边数、平均度、平均边大小
- 度分布: 节点度分布分析
- 边大小分布: 超边大小分布
- 连通性分析: 孤立节点、连接数统计
- 交集分析: 超边交集大小分布
- 语义同质性: 基于节点属性的社会同质性分析
- JSON 格式结果展示
- 支持下载分析结果
- 历史记录查看
编辑 app.py 最后几行:
app.run(host="0.0.0.0", port=8008, debug=True)将 port=8008 改为你想要的端口。
编辑 data/users.json:
{
"admin": {
"password": "pbkdf2:sha256:...",
"name": "管理员",
"role": "admin"
},
"user1": {
"password": "pbkdf2:sha256:...",
"name": "用户1",
"role": "user"
}
}使用 Python 生成密码哈希:
from werkzeug.security import generate_password_hash
print(generate_password_hash("your_password"))编辑 app.py:
app.config['MAX_CONTENT_LENGTH'] = 500 * 1024 * 1024 # 500MB-
修改密钥: 在
app.py中修改SECRET_KEYapp.config['SECRET_KEY'] = 'your-very-secret-key-here'
-
关闭调试模式: 生产环境将
debug=Falseapp.run(host="0.0.0.0", port=8008, debug=False)
-
使用防火墙: 配置 UFW 只允许内网访问
sudo ufw allow from 10.159.0.0/16 to any port 8008
-
使用 Nginx 反向代理: 提供更好的性能和安全性
- app.py: Flask 路由和 Web 逻辑
- metrics_core.py: 纯计算逻辑,不依赖 Flask/PyQt5
HypergraphMetricsCore类: 封装所有计算方法run_all_metrics()函数: 一次性运行所有分析
-
在
metrics_core.py的HypergraphMetricsCore类中添加新方法:def analyze_new_metric(self) -> Dict[str, Any]: # 你的计算逻辑 return {'result': ...}
-
在
run_all_metrics()函数中调用:results['new_metric'] = calculator.analyze_new_metric()
-
在
app.py中添加对应的路由或 API
所有页面继承自 base.html:
{% extends "base.html" %}
{% block title %}页面标题{% endblock %}
{% block content %}
<!-- 页面内容 -->
{% endblock %}# 查找占用端口的进程
sudo lsof -i :8008
# 杀死进程
kill -9 <PID>检查 uploads/ 目录权限:
chmod 755 uploads/查看终端输出的详细错误信息,或查看日志文件 app.log
确保:
- Flask 监听
0.0.0.0而非127.0.0.1 - 服务器防火墙允许该端口
- 校园网防火墙未屏蔽
- 问题反馈: 联系课题组管理员
- 代码仓库: [GitHub 链接]
课题组内部使用