使用单选按钮查询数据库



我正在使用Flask web应用程序查询数据库(SQLite(,并将结果显示在Jinja2模板中,以便在网站上看到它。Python贯穿始终。

一般的想法是,用户将使用单选按钮选择3个不同的参数,并将根据这些参数给出结果。

我对它做了一点改变,试图让人们理解它。用户将访问该网站,并回答以下3个问题:

你的心情如何?你要吃多久?你这顿饭的饮食是什么

利用这些答案,该网站将显示早餐的最佳用餐时间、最佳食物和最佳饮料。数据库中会有所有不同的食物选择。它们以一种不能混合列的方式配对,一次应该调用一行(或id(。

数据库格式如下:

class Breakfast(db.Model):
__tablename__= ‘breakfast_preferences’
id = db.Column(db.Integer, primary_key=True)
breakfast_time = db.Column(db.String)
breakfast_food = db.Column(db.String)
breakfast_drink = db.Column(db.String)
breakfast_mood = db.Column(db.String)
breakfast_duration_available = db.Column(db.String)
breakfast_diet = db.Column(db.String)

表格如下:

class GeneratorForm(FlaskForm):
mood = RadioField("Moods", validators=[InputRequired()], choices=[('happy', 'Happy'), ('sad', 'Sad'), ('okay', 'Okay'), ('angry', 'Angry')])
duration_available = RadioField("Duration", validators=[InputRequired()], choices=[('five mins', 'Five Mins'), ('ten mins', 'Ten Mins'), ('30 mins', '30 Mins'), ('an hour', 'An Hour'), ('1 hour +', '1 Hour +')])
diet = RadioField("Diet", validators=[InputRequired()], choices=[('vegan', 'Vegan'), ('vegetarian', 'Vegetarian'), ('none', 'None')])
submit = SubmitField("Submit")

这就是它变得一团糟的地方。我想好了如何获得一个奇异的结果打印到jinja2模板中,但必须手动输入。我希望可以通过填写烧瓶表单中的单选按钮来查询数据库,然后转到下一页/results.html,主页是/index.html或"/"。

应用程序路由如下:

@app.route('/')
def index():
return render_template("index.html", template_form=GeneratorForm())
# results page
@app.route('/results/<mood>/<duration_available>/<diet>', methods=['GET', 'POST'])
def results():
form = GeneratorForm(request.form)
mood = Breakfast.query.filter_by(breakfast_mood=“happy”, breakfast_duration_available=“five mins”, breakfast_diet=“none”).first()
duration_available = Breakfast.query.filter_by(breakfast_mood=“happy”, breakfast_duration_available=“five mins”, breakfast_diet=“none”).first()
diet = Breakfast.query.filter_by(breakfast_mood=“happy”, breakfast_duration_available=“five mins”, breakfast_diet=“none”).first()
time = Breakfast.query.filter_by(breakfast_mood=“happy”, breakfast_duration_available=“five mins”, breakfast_diet=“none”).first()
food = Breakfast.query.filter_by(breakfast_mood=“happy”, breakfast_duration_available=“five mins”, breakfast_diet=“none”).first()
drink = Breakfast.query.filter_by(breakfast_mood=“happy”, breakfast_duration_available=“five mins”, breakfast_diet=“none”).first()
return render_template('results.html', mood=mood, duration_available=duration_available, diet=diet, time=time, food=food, drink=drink)

如何将结果页面与索引分离,并从烧瓶表单中进行查询?

代码中绝对存在明显的问题,但这也是因为我已经玩了好几天了。我只是需要关于连接所有这些部分的建议。

谢谢你的帮助!这很长,我很感激。

试试这个:

@app.route('/results', methods=['GET', 'POST'])
def results():
form = YourForm()
if form.validate_on_submit():
# Not really sure how is the structure for query your form properly
var = Something.query.filter_by(....)
return render_template('results.html', var=var)
return render_template("index.html", template_form=GeneratorForm())
# I guess you display the form in index and the user get the results in results.html

最新更新