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 变量。
我正在通过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 变量。