所以我正在使用Flask为我家中的IR Automation构建基本控制面板。但是,我无法理解如何从HTML中的表单中获取响应。所以我基本上有一个按钮,可以在按下时更改设备的状态。我遇到的问题是在HTML页面上进行回复并更新,以表明其已开启或关闭。
我的python烧瓶代码:
if request.method == 'POST':
if request.form['lamp'] == 'on':
btn1 = True
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))
s.send(MSG.encode())
data = str(s.recv(BUFFER).decode())
print(data)
s.close()
elif request.form['lamp'] == 'off':
btn1 = False
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))
s.send(MSG.encode())
data = str(s.recv(BUFFER).decode())
print(data)
s.close()
与其合作的HTML部分:
<form method=post>
{% if btn1 == True %}
<button type=submit class="btn btn-default" name="lamp" value="on"><i class="fa fa-lightbulb-o fa-5x" style="color:yellow;"></i><br>Lamp</button>
{{ btn1 }}
{% else %}
<button type=submit class="btn btn-default" name="lamp" value="off"><i class="fa fa-lightbulb-o fa-5x"></i><br>Lamp</button>
{{ btn1 }}
{% endif %}
</form>
点击它后,为什么我的状态不会发生变化?
谢谢, 詹姆斯
答案 0 :(得分:0)
实际上你应该只是使用json调用
<强> flaskapp.py 强>
from flask import Flask,render_template
import json
app = Flask(__name__)
def load_data(flat_file):
try:
return json.load(open(flat_file))
except (IOError,ValueError):
return {}
db_file = "my_data.json"
@app.route("/lamp/on")
def lamp_on():
data = load_data(db_file)
data["lamp"] = "on"
json.dump(data,open(db_file,"wb"))
return json.dumps(data)
@app.route("/lamp/off")
def lamp_off():
data = load_data(db_file)
data["lamp"] = "off"
json.dump(data,open(db_file,"wb"))
return json.dumps(data)
@app.route("/status")
def status():
return load_data(db_file).get("lamp","off")
@app.route("/")
def main():
return render_template("template.html")
if __name__ == "__main__":
app.run(debug=True)
这个应用程序将提供一个api来打开和关闭灯(显然你会想要做的不仅仅是写入文件)。以及“/”路线上的可视化仪表板
<强> template.html 强>
<head>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
</head>
<body>
<div id="content">
</div>
</body>
<script>
function OnButton(){
var url = "/lamp/"+$("#lamp_btn").val().toLowerCase()
$.get(url,update_button)
}
function update_button(){
$.get("/status",function($data){
var next_state = $data == "off"? "On":"Off"
var button = $('<button id="lamp_btn" value="'+next_state+'">Turn Lamp '+next_state+'</button>')
button.click(OnButton);
$("#content").html(button)
});
}
update_button();
</script>
这是仪表板,它只是使用json调用api并只更新按钮(但你可以更新更多......这只是一个非常简单的例子)