我对Python烧瓶和网络服务器概念一般都很陌生,但已设法创建一个简单的webapp。
它基本上包含一个主页,其中包含要填写的表单和一个提交按钮,在以下情况下返回闪烁的消息:1)所有字段都填写正确,2)并非所有字段都填满。
我的代码如下所示:
@app.route('/', methods = ['GET', 'POST'])
def home():
form = preference_form(request.form)
print(form.errors)
if request.method == 'POST':
name = request.form['name']
age = request.form['age']
address = request.form['distance']
date = request.form['date']
if form.validate():
flash('All good!')
else:
flash('Oops! All details are required to provide accurate results!')
return render_template('home.html', form = form)
@app.route('/results', methods = ['POST'])
def return_results():
name = request.form.get('name')
age = request.form.get('age')
address = request.form.get('address')
result = function_a(name=name,
age=age,
address=address)
return result
Flash消息按预期工作但在我添加return_results()
路径后,在填写表单(无论是完整还是不完整)后,它会直接转到/results
。
你能告诉我在这里缺少什么吗?
谢谢!
答案 0 :(得分:1)
您应该在模板文件中呈现Flash消息。在模板中添加以下代码片段,以便显示Flash消息或布局模板文件:
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
更新:一个具有三个执行路径的视图功能将满足您的需求。
1)如果请求方法是get,只需渲染home.html而不使用flash消息;
2)如果请求方法是post并且表单数据通过验证,则呈现 result.html成功的flash消息;
3)如果请求方法已发布但表单数据未通过验证,请使用失败的Flash消息再次呈现home.html。
@app.route('/', methods=["GET", "POST"]
def index():
form = PreferenceForm()
if request.method == "POST":
if form.validate_on_submit():
flash("success.")
result = func(age=form.age.data,
date=form.date.data,
name=form.name.data,
address=form.address.data)
return render_template("result.html", result=result)
else:
flash("failed!")
return render_template('home.html', form=form)