Flask表单验证疑问:返回HTML后为何仍能执行表单验证?
Flask表单验证逻辑疑问解答
问题代码
@app.route("/register", methods=["GET", "POST"]) def register(): form = Form() if form.validate_on_submit(): pass return render_template("register.html", form=form)
疑问内容
在上述代码中,先执行form.validate_on_submit()的判断语句,再执行模板返回操作。我存在如下技术疑问:执行render_template("register.html", form=form)返回HTML文件后,为何表单仍能被验证?因为按照程序逻辑,return语句执行后函数应停止运行。
解答
你搞混了两次不同的HTTP请求的执行流程:
- 第一次是GET请求:用户访问
/register页面,服务器执行register()函数,创建Form实例,form.validate_on_submit()返回False(GET请求没有表单提交数据),随后执行return render_template(...)返回注册页面HTML,本次函数执行完毕后停止。 - 第二次是POST请求:用户填写表单并提交后,浏览器向
/register发送POST请求,服务器会再次调用register()函数:重新创建Form实例,form.validate_on_submit()读取POST过来的表单数据完成验证,验证通过则执行pass中的逻辑(当前为空),之后依然会执行return render_template(...)返回页面。
表单验证是在服务器端完成的,并非浏览器端的HTML自带功能。你看到的“表单仍能被验证”,本质是用户提交表单触发的第二次请求中,服务器重新执行了验证逻辑,和第一次返回HTML的函数执行完全无关。
内容的提问来源于stack exchange,提问作者siddhant ota
相关产品推荐
相关产品推荐

