【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)
相关推荐
北岛寒沫7 分钟前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第九课 公共产品与公共资源)
经验分享·笔记
Vizio<17 分钟前
STM32HAL库开发笔记-STM32CubeMX点灯
笔记·stm32·嵌入式硬件
找方案23 分钟前
hello-agents 学习笔记:智能体发展史 —— 从符号逻辑到 AI 协作的进化之旅
人工智能·笔记·学习·智能体·hello-agents
skywalk816325 分钟前
Auto-Coder用Qwen3-Coder-30B-A3B-Instruct模型写一个学习汉字的项目
人工智能·学习·auto-coder
MarkHD25 分钟前
智能体在车联网中的应用:一份详尽到每日的100天学习路线图
学习
软件技术NINI26 分钟前
如何学习前端
前端·学习
TedLeeX27 分钟前
【Nordic随笔】从零开始学习使用nRF Connect SDK(一、安装ncs3.2.0步骤)
学习·nordic·zephyr·ncs·nrf54
车载测试工程师27 分钟前
CAPL学习-AVB交互层-功能函数-控制类函数
学习·tcp/ip·以太网·capl·canoe
蒙奇D索大36 分钟前
【数据结构】考研408 | 平方探测法精讲:跳跃探查的艺术与聚集迷思
数据结构·笔记·考研·改行学it
迅为电子37 分钟前
迅为iTOP-Hi3516开发板linux驱动开发资料全面上线,构建从入门到精通的完整学习路径!
linux·驱动开发·学习