gpt4 book ai didi

python - flask WTForms : Difference between DataRequired and InputRequired

转载 作者:IT老高 更新时间:2023-10-28 20:53:03 52 4
gpt4 key购买 nike

wtforms.valiadators

中的 DataRequiredInputRequired有什么区别

我的注册表单中有一些字段:

username
password
password_repeat
submit

这些字段应该使用 DataRequired 还是 InputRequired 验证器?

最佳答案

简答

除非你有充分的理由应该使用 InputRequired

为什么?

让我们看看 docs/code for DataRequired() 中的一些注释:

Note there is a distinction between this and DataRequired in that InputRequired looks that form-input data was provided, and DataRequired looks at the post-coercion data.

NOTE this validator used to be called Required but the way it behaved (requiring coerced data, not input data) meant it functioned in a way which was not symmetric to the Optional validator and furthermore caused confusion with certain fields which coerced data to 'falsey' values like 0, Decimal(0), time(0) etc. Unless a very specific reason exists, we recommend using the :class: InputRequired instead.

这是什么意思?

Form 类中,您会注意到两个关键字参数 formdatadata。这些一般对应两个方法processprocess_formdata。当表单数据离线时,其格式并不总是对应于 Field 类型。一个很好的例子是提供给 IntegerField 的值 u'1'。如果您有一个 NumberRange 验证器,这将是个坏消息,因为 u'1' 不是数字。

process_formdata 方法的主要目的是通过在运行验证规则之前将值强制转换为正确的类型来防止这种情况。这就是他们说“查看强制转换后的数据”时所指的内容

问题!

InputRequiredDataRequired 的工作方式与 __call__ 实现相同:

def __call__(self, form, field):
if not field.data or isinstance(field.data, string_types) and not field.data.strip():
if self.message is None:
message = field.gettext('This field is required.')
else:
message = self.message

某些字段类型将数据强制转换为 Falsey 值(0、Decimal(0) 等)。当您有一个 IntegerField 并且表单提交一个类似 '0' 的值时,就会出现问题。如果您将 DataRequired 应用于此,它将无法通过验证。这是因为 DataRequired 将在强制之后评估 if not field.data... 其中 field.dataFalsey 数值0.

关于python - flask WTForms : Difference between DataRequired and InputRequired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982917/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com