Flask模板渲染中的逻辑

时间:2019-07-07 07:15:39

标签: 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,
                    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()的最后一步呈现(显示在浏览器上)。从逻辑上讲,必须首先在浏览器上显示它,以便用户可以填写数据。显然,我缺少一些非常基本的东西。有人可以帮我理解这里的逻辑。谢谢

1 个答案:

答案 0 :(得分:1)

让我们回顾一下用户访问/register时发生的情况:

  1. 用户输入“ http://address:port/register”并点击[Enter]
  2. 浏览器向该地址发送一个GET请求。
  3. Flask将此请求解析为/register路线。
  4. 现在,request.methodGET,因此生成了form(尽管未填写)。
    由于方法不同,if request.method == 'POST' and form.validate():块无法运行。
    因此flask呈现了模板并发送了HTML。
  5. 现在用户可以看到表格,填写表格,然后单击[Send]按钮。
    这次浏览器发出一个POST请求,并附加了所有字段的值。
  6. Flask再次将此请求路由到/register端点,因为它也接受POST请求。
  7. 这次运行if块,并且如果表单有效,则生成用户,并且flask重定向用户。

我希望这能消除您的困惑。