python - Flask 路由逻辑
问题描述
我无法理解烧瓶路由的逻辑。例如,下面的代码片段可以处理注册表单。棘手的(对我来说)部分是form.validate_on_submit()
逻辑在模板渲染之前。也就是说,当用户有机会在表单中提交某些内容时,该函数已经在 return 语句中,超出了form.validate_on_submit()
逻辑。
尽管如此,这个例子仍然有效。我想了解即使在达到返回语句之后如何执行函数中的逻辑。
@app.route('/', methods=('GET', 'POST'))
def contact():
form = ContactForm()
if form.validate_on_submit():
return redirect(url_for('success'))
return render_template('index.html', form=form)
谢谢!
解决方案
这里的关键概念是if
条件。
你错过的form.validate_on_submit
是一个便利功能,相当于说
if request.method=="POST" and form.validate():
# ...
您可以看到此处显示的示例
首次加载页面时,它带有GET请求。我们执行第一行form = ContactForm()
,因为我们的条件不会评估为 True ,因为它不是 POST 请求,所以我们转到最后一行并呈现 HTML 模板,并传入表单。
现在,一旦页面显示给用户并且他们提交了表单,我们就会向与之前相同的路由发送请求,但使用 POST 请求。现在,我们可以验证表单并假设所有内容都已检查,我们可以触发重定向。
希望有所帮助,在您真正对所看内容感到满意之前,肯定会有些混乱!
推荐阅读
- asp.net-mvc - PDFTron webviewer - 如何使用 ASP.net MVC Core 将整个编辑的 pdf 保存到服务器
- javascript - 我无法重新分配 javascript 字符串变量
- stata - Stata - 生成唯一组合忽略顺序
- twitter - Zapier 查找 Twitter URL 提及
- makefile - 为什么 arm-poky-linux-gnueabi-ar 说“invalid option -- 'g'”,而这个选项没有出现在命令行的 args 列表中?
- python - 在python Elasticsearch中滚动不起作用
- azure - 使用 Entity Framework Core 的 Azure Cosmos Db 429 重试策略
- excel - VBA - 将星期几的名称从任何语言更改为英文
- templates - HTML 标记未出现在 Gmail 和 Outlook 中(可能是其他标记)
- javascript - SAPPER - MikroORM:循环依赖,初始化前无法访问“人员”