我有一个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 %}
问题是当按下重新加载页面时,就像按下按钮一样发送。为什么?我怎么能避免这个?
答案 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)
这会创建状态的副本,而不是在全局范围内更改状态,以便下次控制时,状态列表将处于其原始状态
这可以在我身边更加优雅地编码,但我只是想说明这个问题。