Forms 模板渲染中的逻辑

Forms 模板渲染中的逻辑,forms,flask,Forms,Flask,我是Python和flask的新手。我正在查看以下代码: @app.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationForm(request.form) if request.method == 'POST' and form.validate(): user = User(form.username.data, form.email.data,

我是Python和flask的新手。我正在查看以下代码:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(form.username.data, form.email.data,
                    form.password.data)
        db_session.add(user)
        flash('Thanks for registering')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

register.html作为register()中的最后一步呈现(在浏览器上显示)。从逻辑上讲,它必须首先显示在浏览器上,以便用户可以填写数据。显然,我遗漏了一些非常基本的东西。有人能帮我理解这里的逻辑吗。谢谢

让我们看看当用户访问
/register
时会发生什么:

  • 用户在“”中键入并点击
    [输入]
  • 浏览器向地址发送
    GET
    请求
  • Flask将此请求解析为
    /register
    路由
  • 现在,
    request.method
    GET
    ,所以生成了
    form
    (虽然没有填写)。
    如果request.method==“POST”和form.validate():
    块不运行,因为方法不同。
    因此flask呈现模板并发送HTML
  • 现在用户看到表单,填写表单,单击
    [Send]
    按钮。
    浏览器这次发出一个
    POST
    请求,所有字段的值都附加到该请求上
  • Flask再次将此请求路由到
    /register
    端点,因为它也接受
    POST
    请求
  • 这一次
    if
    块运行,并且如果表单有效,则生成用户并重定向用户
    我希望这能消除你的困惑。

    现在整个事情都讲得通了。感谢abdusco的详细解释。