python - 具有自定义验证方法的 WTForms 表单永远无效

标签 python flask wtforms

我想获取用户输入日期的数据,如果未输入任何内容,则获取当前日期的数据。我使用 WTForms 创建了一个带有日期输入的表单,如果日期字段有数据,我会覆盖 validate 以返回 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)

最佳答案

您没有正确覆盖 validatevalidate 触发表单读取数据并填充字段的 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)

关于python - 具有自定义验证方法的 WTForms 表单永远无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778199/

相关文章:

wtforms - 在 wtForms 中创建自定义字段

python - 来自可变长度元素的动态表单 : wtforms

python - Python 面板数据中的多重共线性

python - 将 CSS 类添加到 WTForms SelectField 中的选项

python - Flask 运行 request.method 默认为 'POST' 而不是 'GET'

python - flask:跨 View 函数传递参数

python - CLion:强制附加进程将进程附加到某个调试器

python - 如何将pytorch张量中的维度中的最小k个元素设置为特定值?

python - 使用 CouchDB-Python 批量取消删除 CouchDB 文档