采取表格按钮输入

时间:2015-01-13 14:49:10

标签: python python-3.x flask

所以我正在使用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>

点击它后,为什么我的状态不会发生变化?

谢谢, 詹姆斯

1 个答案:

答案 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并只更新按钮(但你可以更新更多......这只是一个非常简单的例子)