gpt4 book ai didi

python - WTForms:当字符串值为 '0' 时,IntegerField 跳过强制转换

转载 作者:行者123 更新时间:2023-11-28 17:40:17 24 4
gpt4 key购买 nike

This question几乎涵盖了我在这里所追求的,但不完全是。

当字符串值为“0”时,IntegerField 似乎跳过了强制转换。任何其他正整数似乎都可以正常工作。

这是“0”的示例:

from wtforms import validators, Form, IntegerField
from webob.multidict import MultiDict

class TestForm(Form):
num = IntegerField('How Many?', [validators.DataRequired('num required.'), validators.NumberRange(min=0, max=100)])

data_in = {'num': '0'} # Note '0' is a string as would be POSTed
test_form = TestForm(formdata=MultiDict(data_in))
print("HTML Render: %s" % test_form.num())
print(" Validate: %s" % test_form.validate())
print(" Errors: %s" % test_form.errors)

输出是:

HTML Render: <input id="num" name="num" type="text" value="0">
Validate: False
Errors: {'num': ['num required.']}

或者,使用“66”的示例:

from wtforms import validators, Form, IntegerField
from webob.multidict import MultiDict

class TestForm(Form):
num = IntegerField('How Many?', [validators.DataRequired('num required.'), validators.NumberRange(min=0, max=100)])

data_in = {'num': '66'} # Note '66' is a string as would be POSTed
test_form = TestForm(formdata=MultiDict(data_in))
print("HTML Render: %s" % test_form.num())
print(" Validate: %s" % test_form.validate())
print(" Errors: %s" % test_form.errors)

其中有:

HTML Render: <input id="num" name="num" type="text" value="66">
Validate: True
Errors: {}

什么给了?我可以改用 InputRequired 来保持它的类型不可知,但这完全违背了这样做的目的。

最佳答案

恐怕您必须保持该类型不可知并改用 InputRequired :-)

来自 here 的文档说:

[...]这个验证器过去被称为 Required 但它的行为方式(需要强制数据,而不是输入数据)意味着它以某种方式起作用这与 Optional 验证器不对称,因此导致与某些字段混淆,这些字段将数据强制为“虚假”值,例如0、十进制(0)、时间(0) 等。除非有非常具体的原因存在,我们建议改用 :class:InputRequired。”

实际的代码 cuplrit 在下面的第 201 行:

if not field.data

关于python - WTForms:当字符串值为 '0' 时,IntegerField 跳过强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335398/

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