首页 > 解决方案 > Flask 路由逻辑

问题描述

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

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

@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)

谢谢!

标签: pythonflasklogical-operatorsexecution

解决方案


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

你错过的form.validate_on_submit是一个便利功能,相当于说

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

您可以看到此处显示的示例

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

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

希望有所帮助,在您真正对所看内容感到满意之前,肯定会有些混乱!


推荐阅读