我正在通过 Flask Web Development 这本书学习烧瓶。我对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应用程序将收到GET请求。此GET请求将由index
视图功能处理。 form
将从NameForm()
构建,当时它将为空。因此form.validate_on_submit()
将返回false。
然后,当用户通过POST请求提交带有数据的表单时,index
视图功能也会处理它。所以另一个form
将从NameFrom()
构建,我认为它也是空的,这使得form.validate_on_submit()
仍然返回false。
显然,我的想法是错误的。
我的问题是:当用户通过POST提交表单时,form.validate_on_submit()
如何评估为真?
提前致谢!
答案 0 :(得分:1)
使用Flask时,可以从flask.request
获取当前请求上下文。请求对象包括当前方法和POST变量(以及来自HTTP协议的标头/ cookie /路径等)。
当调用form.validate_on_submit()
时,此方法使用当前请求对象在提取和验证POST变量之前首先检查请求方法是否为POST。