【发布时间】:2017-05-07 04:34:57
【问题描述】:
我正在为家庭供暖控制系统编写原型前端,当用户从下拉框中选择房间和星期几时,我希望能够查询 Redis 数据库并检索当前设置每小时的温度,并使用它来设置温度下拉框中的选定值。然后用户可以更改一个或多个值并提交它们。我有提交和编写工作,只是想弄清楚设置选定的内容。
这是 HTML:
{% extends "bootstrap/base.html" %}
{% block title %}Setting Room Temperatures{% endblock %}
{% block navbar %}
<div class="navbar navbar-fixed-top">
<!-- ... -->
</div>
{% endblock %}
{% block content %}
</head>
<body>
<h1>Room temperature configuration</h1>
<form action="{{ url_for('heating_config_form')}}" method="post" class="form-inline">
<div class="form-group">
<label for="roomselect">Room:</label>
<select class="form-control" name="roomselect">
<option value="dining">Dining</option>
<option value="kitchen">Kitchen</option>
<option value="lounge">Lounge</option>
<option value="study">Study</option>
</select>
</div>
<br>
<br>
<div class="form-group">
<label for="dayselect">Day :</label>
<select class="form-control" name="dayselect">
<option value="monday">Monday</option>
<option value="tuesday">Tuesday</option>
<option value="wednesday">Wednesday</option>
<option value="thursday">Thursday</option>
<option value="friday">Friday</option>
<option value="saturday">Saturday</option>
<option value="sunday">Sunday</option>
</select>
</div>
<br>
<br>
<div class="form-group">
<label for="1AM">1AM :</label>
<select class="form-control" name="1AM">
<option value="5">5</option>
<option value="6">6</option>
</select>
<label for="2AM">2AM :</label>
<select class="form-control" name="2AM">
<option value="5">5</option>
<option value="6">6</option>
</select>
</div>
<br>
<br>
<button type="submit" value="submitted" name="update">Update temperature </button><br>
<br>
</form>
<br>
</body></html>
{% endblock %}<html><head>
这是 Python Flask 代码
from flask import Flask
from flask import request
from flask import render_template
from flask_bootstrap import Bootstrap
import redis
app = Flask(__name__)
app.debug = True
bootstrap = Bootstrap(app)
db = redis.Redis('localhost')
@app.route('/', methods=['GET','POST'])
def heating_config_form():
error=""
if request.method == 'POST' and request.form['update'] == 'submitted':
Room = (request.form.get('roomselect'))
Day = (request.form.get('dayselect'))
AM1 = (request.form.get('1AM'))
AM2 = (request.form.get('2AM'))
key = (Room + "_" + Day)
db.hset(key, "1:00", AM1)
db.hset(key, "2:00", AM2)
return render_template('set-room-tempv5.html')
else :
return render_template('set-room-tempv5.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
我知道可能有更好的方法来解决这个问题(WTForms?),但我想获得一个我理解的简单设置界面,这样我就可以在开发更好的前端的同时对系统进行原型设计,因为我是 Flask 的新手并且不希望整个供暖系统依赖于我的能力:)
将温度添加到数据库可以正常工作,这是 redis-cli 监视器的典型监视器输出
127.0.0.1:6379> monitor
OK
1482336847.287342 [0 127.0.0.1:34180] "HSET" "kitchen_tuesday" "1:00" "5"
1482336847.288042 [0 127.0.0.1:34180] "HSET" "kitchen_tuesday" "2:00" "5"
我在想也许像以下上下文处理器这样的东西可以提供帮助?
@app.context_processor
def utility_processor():
def retrieve_temp(sroom, sday, stime):
skey= (sroom + "_" + sday)
stemp = db.hget(skey, stime)
return stemp
return dict(retrieve_temp=retrieve_temp)
这将使函数retrieve_temp 可用于所有模板 - 我想!
然后不知何故,一旦模板被渲染,默认房间和日期用于设置时间下拉菜单上的“选定”选项,然后每次移动房间和日期下拉菜单时,同样的情况再次发生。
因此,如果默认值是用餐和星期一,因为它们是选择选项中的第一个,则将检索凌晨 1 点和凌晨 2 点的温度并将其设置为这些下拉菜单的选择(有更多的时间和更多的临时工,这些已被删除为简洁起见)。如果房间和/或日期发生变化,它会再次发生。
【问题讨论】:
-
澄清......你想要的是有一组选择框,其中第二个只显示基于第一个选择的值?并且每次第一个框中的选择发生变化时,您希望 ping 数据库以获取适当的选择以填充第二个选择?
-
这是一个公平的总结 PJ。一旦用户选择了房间和日期,就会从该房间/天组合的数据库中检索每小时的适当温度设置,并填充适当的下拉选择。例如,如果用户选择休息室和星期二,则将查询数据库以获取当天每个小时的所有当前温度设置,以便可以为这些时间设置选择。我认为可以更容易选择一个页面/天,一旦提交,一个新页面显示了从DB span>检索的相应选择的下拉框
标签: python-3.x flask