Web 服务器如何处理 Web 表单?

How does web forms be processed by the web server?

我正在通过Flask Web 开发这本书学习 Flask。我对 Web 服务器如何处理 Web 表单感到困惑。更具体地说,如何在 Web 服务器中处理 POSt 请求?

这是生成对主索引请求的响应的代码片段:

@app.route('/', methods=['GET', 'POST'])
def index():
    name = None
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
        form.name.data = ''
    return render_template('index.html', form=form, name=name)

在我看来,当客户端第一次访问主索引时,flask app会收到一个GET请求。此 GET 请求将由 index 视图函数处理。 form会从NameForm()构造出来,那时候是空的。所以 form.validate_on_submit() 会 return false.

然后,当用户通过 POST 请求提交带有数据的表单时,它也会被 index 视图函数处理。所以另一个 form 将从 NameFrom() 构造,我认为它也将是空的,这使得 form.validate_on_submit() 仍然 return false。

显然,我的想法是错误的。

我的问题是:当用户通过 POST 提交表单时,form.validate_on_submit() 如何评估为真?

提前致谢!

使用 Flask 时,可以从 flask.request 获取当前请求上下文。请求对象包括当前方法和 POST 变量(以及来自 HTTP 协议的 headers/cookies/path 等)。

当调用 form.validate_on_submit() 时,此方法使用当前请求对象首先检查请求方法是否为 POST,然后再提取和验证 POST 变量。