2015-01-13 3 views
0

Итак, я использую Flask для создания базовой панели управления для ИК-автоматизации в моем доме. Однако я не понимаю, как принять ответ из формы в моем HTML. Поэтому у меня в основном есть кнопка, которая изменяет состояние устройства при нажатии. Проблема, с которой я столкнулась, - принять этот ответ и обновить его на странице HTML, чтобы сказать, что он включен или выключен.Ввод формы ввода кнопки

Мой питон код Колба:

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> 

Почему не btn1 государственная меняется, когда я нажимаю его?

Спасибо, Джеймс

+0

потому что в обоих случаях вы отправляете тот же MSG ... вам также нужно будет передать btn1 в средство визуализации шаблона –

+0

@JoranBeasley Не хотите ли вы разработать? – Jam3sn

+0

вам нужно вызвать 'render_template (« my.html », btn1 = True)', когда вы создаете свой шаблон, вам также нужно будет сохранить текущее состояние кнопки в каком-то постоянном кеше, поскольку он, вероятно, не будет сохраняться между соединениями –

ответ

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 системных вызовов и обновления только кнопка (но вы можете обновить гораздо больше ... это просто очень простой пример)

Смежные вопросы