重新加载页面重新发送数据

时间:2015-11-29 02:47:00

标签: python flask

我有一个Flask的简单代码。我有一个带有4个按钮的网站,当按下时发送一个POST到Flask并返回相同的页面,但是按下另一种颜色的按钮。每个按钮的状态存储在bool数组中 这是Flask代码:

import numpy as np
from flask import Flask, request, render_template

app = Flask(__name__)
states = np.array([0, 0, 0, 0], dtype=bool)

@app.route('/control', methods=['GET', 'POST'])
def control():
    if request.method == 'POST':
        val = int(request.form['change rele state'])
        states[val] = not states[val]

        return render_template('zapa.html', states=states)
    else:
        return render_template('zapa.html', states=states)

if __name__ == '__main__':
    app.run(debug=True)

页面:

{% extends "layout.html" %}

{% block content %}
  <h2>Control</h2>
  <p>Botones</p>

  <p>{{ states }}</p>

  <form action="/control" method="POST">
    {% for state in states %}
      {% if state == True %}
        <button class="btn btn-primary" type="submit" name="change rele state" value="{{ loop.index0 }}">Enchufe {{ loop.index }} Off</button>
      {% endif %}
      {% if state == False %}
        <button class="btn btn-danger" type="submit" name="change rele state" value="{{ loop.index0 }}">Enchufe {{ loop.index }} On</button>
      {% endif %}
    {% endfor %}
  </form>

{% endblock %}

问题是当按下重新加载页面时,就像按下按钮一样发送。为什么?我怎么能避免这个?

1 个答案:

答案 0 :(得分:0)

我对烧瓶没有非常深刻的理解,事实上没有任何东西,但对我来说,似乎你已经让你的服务器记住你正在谈论的这个按钮的状态。

return render_template('zapa.html', states=states)

您没有返回更改原始状态,而是在POST上返回上一个状态的更改版本,并提供“更改角色状态”请求,并保留否则为原始值。

我想你想做什么(如果我错了,请纠正我)

@app.route('/control', methods=['GET', 'POST'])
def control():
    if request.method == 'POST':
        val = int(request.form['change rele state'])
        current_states = states[:]
        current_states[val] = not current_states[val]
        return render_template('zapa.html', states=current_states)
    else:
        return render_template('zapa.html', states=states)

这会创建状态的副本,而不是在全局范围内更改状态,以便下次控制时,状态列表将处于其原始状态

这可以在我身边更加优雅地编码,但我只是想说明这个问题。