以下是一个基于 Echarts + Python Flask 的动态实时大屏监管系统的完整实现方案,包含源码结构说明与部署指导:
一、核心功能实现效果- 动态数据刷新:通过定时轮询机制实现图表自动更新
- 主题切换功能:支持右键切换暗黑/明亮主题模式
二、技术架构实现1. 前端实现方案- 核心库:Echarts 5.4.3(支持动态数据绑定)
- 开发工具:WebStorm 2023.3
- 关键代码结构:
<!-- static/index.html 核心结构 --><div id="main-container" style="width:100%;height:100vh"> <div id="chart1" style="width:50%;height:50%;float:left"></div> <div id="chart2" style="width:50%;height:50%;float:right"></div></div><script> // 主题切换实现 document.oncontextmenu = function(e) { e.preventDefault(); const currentTheme = echarts.getInstanceByDom(document.getElementById('chart1')).getOption().theme; // 切换主题逻辑... }; // 动态数据更新 function fetchData() { fetch('/api/data') .then(res => res.json()) .then(data => { chart1.setOption({ series: [{ data: data.values }] }); }); } setInterval(fetchData, 3000); // 3秒刷新一次</script>2. 后端实现方案- 框架选择:Flask 2.3.2
- 开发工具:PyCharm 2023.3
- 核心代码:
# main.py 核心实现from flask import Flask, jsonifyimport randomimport timeapp = Flask(__name__, static_folder='static')@app.route('/api/data')def get_data(): # 模拟实时数据生成 return jsonify({ 'timestamp': int(time.time()), 'values': [random.randint(10, 100) for _ in range(7)] })if __name__ == '__main__': app.run(host='0.0.0.0', port=88, debug=True)三、完整源码结构project/├── static/ # 前端资源目录│ ├── js/│ │ └── echarts.min.js # Echarts核心库│ ├── css/│ │ └── style.css # 自定义样式│ └── index.html # 主页面├── data/ # 数据存储目录│ └── realtime.json # 模拟数据文件├── app.py # Flask主程序└── requirements.txt # 依赖清单四、部署实施步骤环境准备:
# 创建虚拟环境(推荐)python -m venv venvsource venv/bin/activate # Linux/MacvenvScriptsactivate # Windows# 安装依赖pip install -r requirements.txt依赖清单示例:
flask==2.3.2pandas==2.0.3pyecharts==2.0.3启动服务:
python app.py访问系统:
浏览器打开:
http://localhost:88/static/index.html
全屏显示:按 F11 键
五、关键问题解决方案跨域问题处理:
# 在Flask应用中添加CORS支持from flask_cors import CORSCORS(app)数据持久化方案:
# 使用SQLite替代JSON文件示例import sqlite3conn = sqlite3.connect('data.db')cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS metrics (timestamp INTEGER, value REAL)''')性能优化建议:
前端:启用Echarts的dataZoom组件处理大数据量
后端:使用gevent实现异步请求处理
六、扩展功能实现多屏适配方案:
/* 响应式布局实现 */@media (max-width: 1200px) { #chart1, #chart2 { width: 100% !important; height: 40% !important; }}WebSocket实时推送:
# 使用Flask-SocketIO实现from flask_socketio import SocketIOsocketio = SocketIO(app)@socketio.on('connect')def handle_connect(): emit('data_update', {'data': generate_data()})
完整源码获取:通过以下链接获取完整项目文件(含详细注释):
源码仓库地址
提示:实际部署时建议添加Nginx反向代理,并配置HTTPS加密传输。对于生产环境,推荐使用gunicorn作为WSGI服务器替代Flask内置服务器。