You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django与树莓派本地Python脚本通信及IoT MFA实现方案咨询

解决方案:树莓派IoT Hub指纹MFA与Web UI交互实现

一、Django适配方案(兼容现有Dashboard)

Django本身确实不原生支持实时DOM更新,但可以通过WebSocket补全实时通信能力,无需完全重构现有代码:

1. 通信架构设计

  • 用channels库给Django添加WebSocket支持,树莓派本地传感器脚本作为WebSocket客户端,与Django服务端建立长连接
  • 本地脚本负责核心逻辑:指纹传感器控制、OTP生成/验证、温湿度数据采集,所有状态变化直接通过WebSocket推送给Django
  • Django作为中间层,将WebSocket消息转发给前端页面,同时处理常规HTTP请求(如OTP提交、用户状态更新)

2. 注册流程落地

  1. 前端注册页收集用户邮箱后,触发WebSocket消息通知本地脚本启动指纹录入
  2. 本地脚本处理指纹录入:
    • 若录入失败(图像模糊、重复扫描等),立即推送{"type": "fingerprint_enroll", "status": "failed", "msg": "请重新扫描指纹"}给前端,实时显示错误提示
    • 录入成功后,生成6位OTP并发送至用户邮箱,同时推送{"type": "fingerprint_enroll", "status": "success", "user_id": "<关联用户ID>"}给前端,自动切换到OTP输入页
  3. 用户输入OTP后,前端发送HTTP POST请求给Django,Django通过WebSocket将OTP传给本地脚本验证
  4. 本地脚本返回验证结果,Django更新用户状态,前端跳转至首页

3. 登录流程落地

  1. 用户进入登录页,前端通过WebSocket通知本地脚本启动指纹匹配
  2. 本地脚本匹配指纹成功后,生成新OTP并发送邮件,同时推送{"type": "fingerprint_match", "status": "success", "user_id": "<匹配用户ID>"}给前端,显示OTP输入框
  3. 用户提交OTP,Django转发给本地脚本验证,验证通过后完成登录并跳转首页

4. 温湿度数据实时更新

  • 本地脚本定时采集温湿度数据,通过WebSocket推送{"type": "sensor_data", "temp": "25.5", "humidity": "60%"}给Django
  • Django将消息广播给当前在线用户,前端用原生JS直接更新DOM元素

关键代码片段

  • 树莓派本地脚本WebSocket客户端示例(使用websockets库):
import asyncio
import websockets
import random
import smtplib

async def sensor_client():
    async with websockets.connect("ws://localhost:8000/ws/sensor/") as websocket:
        # 模拟指纹录入成功后生成OTP
        otp = random.randint(100000, 999999)
        # 发送邮件(省略SMTP配置)
        # smtplib.SMTP("smtp.example.com", 587).sendmail(...)
        await websocket.send(f'{{"type": "fingerprint_enroll", "status": "success", "user_id": 1, "otp": {otp}}}')

asyncio.get_event_loop().run_until_complete(sensor_client())
  • 前端WebSocket监听逻辑(原生JS):
const ws = new WebSocket('ws://' + window.location.host + '/ws/sensor/');
ws.onmessage = function(e) {
    const data = JSON.parse(e.data);
    switch(data.type) {
        case 'fingerprint_enroll':
            if(data.status === 'failed') {
                document.getElementById('enroll-status').textContent = data.msg;
            } else {
                window.location.href = '/verify-otp/';
            }
            break;
        case 'sensor_data':
            document.getElementById('temp-display').textContent = data.temp + '℃';
            document.getElementById('humidity-display').textContent = data.humidity + '%';
            break;
    }
};

二、替代框架推荐(追求更轻量化实时交互)

如果不想在Django上叠加channels,推荐使用FastAPI + WebSockets:

  • FastAPI天生支持异步和WebSocket,代码更简洁,实时响应速度更快,适合IoT场景的轻量服务
  • 前端可直接用原生JS或轻量框架(如Vue)实现UI,与FastAPI的WebSocket端点直接通信
  • 本地脚本的交互逻辑与Django方案完全一致,仅需调整WebSocket连接地址

三、核心安全与体验注意事项

  • 所有敏感操作(OTP生成/验证、指纹匹配)必须在树莓派本地脚本执行,Web服务仅做消息转发,确保安全性
  • 细化指纹传感器的错误状态(图像质量差、传感器异常、重复录入等),每个状态对应明确的前端提示
  • 给WebSocket连接添加心跳机制,避免树莓派脚本意外断线后无法自动重连

内容的提问来源于stack exchange,提问作者Danyaal Majid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:47:29