无法在 Flask webapp 中关闭开关(只能打开)

Switch can not be turned OFF in Flask webapp (only turned ON)

我想在我的 flask webapp 中切换到 enable/disable 物联网设备的自动驾驶功能。 开关似乎只有在从关闭位置移动到打开位置时才起作用。

如果您尝试将其从打开切换到关闭,它只会重新加载页面并将开关保持在打开位置。

这是我使用的代码

在 HTML 模板中 我遍历所有设备以使用开关显示它们的自动驾驶状态。单击该表单即可发布。这是一段简化的代码。

  {% for device in devices  %}
    <form method="POST">
      <div class="form-check form-switch">
        <label class="form-check-label" for="{{device.unique_id}}.autopilot">Autopilot</label>
        <input class="form-check-input" type="checkbox" name="{{device.unique_id}}.autopilot" {% if device.autopilot %}checked{% endif %} onclick="submit();"> 
  {% endfor %}

Here is an example of what the switch looks like

在烧瓶中 app.py 我有一个设备列表,当发送 POST 请求时,它循环遍历设备列表以检查哪个自动驾驶仪打开或关闭。

@app.route('/', methods=['GET', 'POST'])
def home():  
    global devices
    if request.method == "POST":
        # decode response & filter out the unique ID
        response = request.get_data().decode("utf-8")
        resp_device_id = response.split(".")[0]
        
        # compare unique ID with devices & toggle autopilot
        for d in devices:
            if str(d.unique_id) == resp_device_id:
                d.autopilot = not d.autopilot
            else:
                print(str(d.unique_id) + "&" + resp_device_id + "do not match")
    return render_template('home.html', devices = devices)

从关闭切换到开启时一切正常。但是当从 ON 切换到 OFF 时 POST 响应似乎是空的。因此 IF 语句的结果为 FALSE,并且没有任何切换。

你知道这里会出什么问题吗?

我终于明白了。 显然这是预期的行为。

如果未选中此框,则页面不会发送数据。所以响应实际上是空的。 为了识别开关,我在表单中添加了一个隐藏字段。 像这样:

<input type="hidden" id="{{device.unique_id}}" name="device" value="{{device.unique_id}}">