【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)
相关推荐
代码游侠1 分钟前
学习笔记——HC-SR04 超声波测距传感器
开发语言·笔记·嵌入式硬件·学习
军军君0116 分钟前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
知识分享小能手28 分钟前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04中的人工智能—— 知识点详解 (25)
人工智能·学习·ubuntu
崇山峻岭之间29 分钟前
Matlab学习记录32
开发语言·学习·matlab
乌暮42 分钟前
JavaEE初阶---《JUC 并发编程完全指南:组件用法、原理剖析与面试应答》
java·开发语言·后端·学习·面试·java-ee
CCPC不拿奖不改名1 小时前
计算机网络:电脑访问网站的完整流程详解+面试习题
开发语言·python·学习·计算机网络·面试·职场和发展
Abbylolo1 小时前
《Obsidian Excalidraw插件配置与使用指南》
笔记
左绍骏1 小时前
01.学习预备
android·java·学习
非凡ghost1 小时前
ImageConverter(图像转换编辑工具)
图像处理·人工智能·windows·学习·计算机视觉·软件需求
@zulnger1 小时前
python 学习笔记(闭包)
笔记·python·学习