【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)
相关推荐
xian_wwq35 分钟前
【学习笔记】-深度认知系列-第2讲-大模型到底是什么?——拆解“参数、训练、推理”
笔记·学习·深度认知
lzhdim2 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
Oll Correct3 小时前
Adobe illustrator 案例九:百宝箱图标绘制
笔记·ui·adobe·illustrator
那年窗外下的雪.3 小时前
AIDC 学习日志|第 15 天|EVPN 多归属故障收敛与撤销机制
网络·学习·php
M78佐菲4 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
我命由我123456 小时前
人脸识别 - 勒克斯(光线照射到物体表面上的明亮程度)
android·java·学习·java-ee·人脸识别·学习方法·android runtime
乐橙开放平台7 小时前
养老 SaaS 笔记:setMessageCallback 事件桥接 + msgType 映射 P0/P1,先 ACK 再分流值班流
笔记·物联网·音视频·智能家居
Logintern097 小时前
【每天学习一点点】MPI是什么?
学习·mpi·多机训练
fengci.7 小时前
提示词注入学习小结
学习
晓梦林8 小时前
Tools2靶场学习笔记
笔记·学习