Flask 路由逻辑

Flask routing logic

我无法理解 flask 路由的逻辑。例如,下面的代码片段可以处理注册表单。棘手的(对我来说)部分是 form.validate_on_submit() 逻辑是 模板呈现之前。也就是说,当用户有机会在表单中提交内容时,该函数已经在 return 语句中,超过了 form.validate_on_submit() 逻辑。

尽管如此,这个例子仍然有效。我想了解即使在达到 return 语句后如何执行函数中的逻辑。

@app.route('/', methods=('GET', 'POST'))
def contact():
    form = ContactForm()
    if form.validate_on_submit():
        return redirect(url_for('success'))
    return render_template('index.html', form=form)

谢谢!

这里的关键概念是 if 条件。

您错过的事实是 form.validate_on_submit 是一个 便利函数 ,相当于说

if request.method=="POST" and form.validate():
    # ...

您可以查看显示此内容的示例 here

首次加载页面时,它带有 GET 请求。我们执行第一行 form = ContactForm() 并且,由于我们的条件 未评估为 True 它不会因为它不是 POST 请求,我们转到最后一行并渲染 HTML 模板,传入表单。

现在,一旦页面显示给用户并且他们提交了表单,我们就会向 与以前相同的路由发送请求,但带有 POST 请求.现在,我们可以验证表单并假设一切都已检查完毕,我们可以触发重定向。

希望对您有所帮助,在您真正对所看到的内容感到满意之前肯定会有点困惑!