具有自定义验证方法的 WTForms 表单永远无效
WTForms form with custom validate method is never valid
我想获取用户输入日期的数据,如果未输入任何内容,则获取当前日期的数据。我使用 WTForms 创建了一个带有日期输入的表单,如果日期字段有数据,则将 validate
覆盖为 return True
。但是,即使我输入日期,表格也始终无效。为什么这不起作用?
class ChooseDate(Form):
date = DateField(format='%m-%d-%Y')
def validate(self):
if self.date.data is None:
return False
else:
return True
@app.route('/index', methods=['GET', 'POST'])
def index():
date_option = ChooseDate()
print(date_option.date.data) # always None
if date_option.validate():
request_date = date_option.date.data
else:
request_date = datetime.today().date()
return render_template_string(template_string, form=date_option, date=request_date)
您没有正确覆盖 validate
。 validate
触发表单读取数据并填充字段的 data
属性。你没有打电话给 super
,所以这永远不会发生。
def validate(self):
res = super(ChooseDate, self).validate()
# do other validation, return final res
在这种情况下,没有理由覆盖 validate
,您只是想确保为该字段输入了数据,因此请使用内置的 InputRequired
验证器。使用字段验证器也会向表单添加错误消息。
from wtforms.validators import InputRequired
date = DateField(validators=[InputRequired()])
有关 validation 的更多信息,请参阅文档。
最后,您需要将表单数据传递给表单。如果您使用 Flask-WTF 扩展程序的 FlaskForm
,这将自动通过。
from flask import request
form = ChooseDate(request.form)
我想获取用户输入日期的数据,如果未输入任何内容,则获取当前日期的数据。我使用 WTForms 创建了一个带有日期输入的表单,如果日期字段有数据,则将 validate
覆盖为 return True
。但是,即使我输入日期,表格也始终无效。为什么这不起作用?
class ChooseDate(Form):
date = DateField(format='%m-%d-%Y')
def validate(self):
if self.date.data is None:
return False
else:
return True
@app.route('/index', methods=['GET', 'POST'])
def index():
date_option = ChooseDate()
print(date_option.date.data) # always None
if date_option.validate():
request_date = date_option.date.data
else:
request_date = datetime.today().date()
return render_template_string(template_string, form=date_option, date=request_date)
您没有正确覆盖 validate
。 validate
触发表单读取数据并填充字段的 data
属性。你没有打电话给 super
,所以这永远不会发生。
def validate(self):
res = super(ChooseDate, self).validate()
# do other validation, return final res
在这种情况下,没有理由覆盖 validate
,您只是想确保为该字段输入了数据,因此请使用内置的 InputRequired
验证器。使用字段验证器也会向表单添加错误消息。
from wtforms.validators import InputRequired
date = DateField(validators=[InputRequired()])
有关 validation 的更多信息,请参阅文档。
最后,您需要将表单数据传递给表单。如果您使用 Flask-WTF 扩展程序的 FlaskForm
,这将自动通过。
from flask import request
form = ChooseDate(request.form)