一、背景
在使用 Flask + WTForms 开发 Web 应用时,我们经常需要获取用户输入的表单值。
很多新手开发者会遇到这样的困惑:
- 在模板渲染前,我用
form.field.data
能拿到值; - 但是在表单提交(submit)后,再用
.data
发现值不对,或者依然是初始值; - 而换成
request.form.get("field")
却能拿到用户提交后的最新值。
为什么会这样?这其实涉及 表单字段初始化值 与 请求提交时的动态值 两个阶段的区别。
二、表单字段的生命周期
在 Flask + WTForms 的工作流中,表单字段的值大致分两个阶段:
-
初始化阶段(表单实例化时)
- 表单对象在 Python 端被创建;
- 字段的
.data
属性会被赋值成 初始值(可能来自数据库、默认参数等); - 这时