- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
wtforms.valiadators
DataRequired
和
InputRequired
有什么区别
我的注册表单中有一些字段:
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 theOptional
validator and furthermore caused confusion with certain fields which coerced data to 'falsey' values like0
,Decimal(0)
,time(0)
etc. Unless a very specific reason exists, we recommend using the :class:InputRequired
instead.
这是什么意思?
在 Form
类中,您会注意到两个关键字参数 formdata
和 data
。这些一般对应两个方法process
和process_formdata
。当表单数据离线时,其格式并不总是对应于 Field
类型。一个很好的例子是提供给 IntegerField
的值 u'1'
。如果您有一个 NumberRange
验证器,这将是个坏消息,因为 u'1'
不是数字。
process_formdata
方法的主要目的是通过在运行验证规则之前将值强制转换为正确的类型来防止这种情况。这就是他们说“查看强制转换后的数据”时所指的内容
问题!
InputRequired
和 DataRequired
的工作方式与 __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.data
是 Falsey 数值0
.
关于python - flask WTForms : Difference between DataRequired and InputRequired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982917/
wtforms.valiadators中的DataRequired和InputRequired有什么区别 我的注册表单中有一些字段: username password password_repeat
我是一名优秀的程序员,十分优秀!