【Flask】前后端交互示例

html页面动态加载Modbus与数据库的连接状态。

html部分:

复制代码
<div class="status-item">
    <div class="status-label">Modbus:</div>
    <div class="status-value">
        <span class="connection-dot connected" id="modbus-dot"></span>
        <span id="modbus-text">已连接</span>
    </div>
</div>
<div class="status-item">
    <div class="status-label">数据库:</div>
    <div class="status-value">
        <span class="connection-dot connected" id="database-dot"></span>
        <span id="database-text">已连接</span>      
    </div>
</div>

JavaScript部分:

复制代码
const STATUS = {
    CONNECTED:'connected',
    DISCONNECTED:'disconnected'
};

let modbusStatus = STATUS.DISCONNECTED;
let databaseStatus = STATUS.DISCONNECTED;

// 连接状态检查
function checkConnectionStatus() {
    fetch('/api/connection-status')
        .then(response => response.json())
        .then(data => {
            // 更新连接状态指示器
            updateStatusIndicator('modbus', data.modbus);
            updateStatusIndicator('database', data.database);
            //updateStatusIndicator('video', data.video);
            
            // 控制视频显示
            const showImageRadio = document.getElementById('show-image');
            const videoStream = document.getElementById('video-stream');
            if (showImageRadio.checked && data.video) {
                videoStream.style.display = 'block';
            } else {
                videoStream.style.display = 'none';
            }
        })
        .catch(error => console.error('Error checking connection status:', error));
}

function updateStatusIndicator(type, isConnected) {
    // 这里需要根据实际元素更新连接状态
    if(type == 'modbus'){
        modbusStatus = isConnected ? STATUS.CONNECTED : STATUS.DISCONNECTED;
    } else if (type === 'database') {
        databaseStatus = isConnected ? STATUS.CONNECTED : STATUS.DISCONNECTED;
    }
    updateStatusDisplay();
}


// 更新状态显示
function updateStatusDisplay() {
    //更新Modbus状态显示
    const mosbusDot = document.getElementById('modbus-dot');
    const modbusText = document.getElementById('modbus-text');

    mosbusDot.className = `connection-dot ${modbusStatus}`;
    modbusText.textContent = modbusStatus === STATUS.CONNECTED ? '已连接' : '未连接';


    // 更新数据库状态显示
    const databaseDot = document.getElementById('database-dot');
    const databaseText = document.getElementById('database-text');
    databaseDot.className = `connection-dot ${databaseStatus}`;
    databaseText.textContent = databaseStatus === STATUS.CONNECTED ? '已连接' : '未连接';
    
}

// 页面加载后立即检查一次
document.addEventListener('DOMContentLoaded', function() {
    checkConnectionStatus();
});

// 然后每隔一定时间检查一次(例如每5秒)
setInterval(checkConnectionStatus, 5000);

python Flask后端:

复制代码
@app.route('/api/connection-status')
def connection_status():
    """获取连接状态"""
    status = {
        'modbus': modbus_client.is_connected(),
        'database': db_manager.is_connected(),
        'video': video_capture.isOpened() if video_capture else False
    }
    return jsonify(status)
相关推荐
GLDbalala7 分钟前
GPU PRO 5 - 1.2 Reducing Texture Memory Usage by 2-Channel Color Encoding 笔记
笔记
IT199514 分钟前
Docker笔记-对docker-compose.yml基本认识
笔记·docker·容器
猹叉叉(学习版)1 小时前
【系统分析师_知识点整理】 1.计算机系统
笔记·软考·系统分析师
星幻元宇VR2 小时前
VR环保学习机|科技助力绿色教育新模式
大数据·科技·学习·安全·vr·虚拟现实
CryptoPP2 小时前
开发者指南:构建实时期货黄金数据监控系统
大数据·数据结构·笔记·金融·区块链
_一只小QQ2 小时前
软考中级第二节
学习
天理小学渣2 小时前
JavaScript_基础教程_自学笔记
开发语言·javascript·笔记
小飞菜涅3 小时前
fast-lio2复现
嵌入式硬件·学习·ubuntu
chushiyunen3 小时前
uv使用笔记(python包的管理工具)
笔记·python·uv
sheeta19983 小时前
LeetCode 每日一题笔记 日期:2025.03.23 题目:1594.矩阵的最大非负积
笔记·leetcode·矩阵