范围 0 到 100 之间的数字验证
Number Validation Between Range 0 and 100
我当前的WTForms Number验证器代码如下:
class ScoreForm(Form):
score = FloatField(validators=[DataRequired(), NumberRange(0,100)])
submit = SubmitField()
我希望将分数指定在 0 到 100 之间(包括两者和小数点)。
上面的代码有两个问题:
它不让我输入 0 作为值。这样做会吐出内置错误消息
[This field is required.]
如果我在字段中输入一些字符串,我会收到与上面相同的错误消息,这不是正确的消息。
如何解决这两个问题?
在 FloatField
和 DecimalField
出现了很多奇怪的行为之后,我终于使用了 StringField
并为我的上述用例编写了一个自定义验证器,如下所示:
class ScoreForm(Form):
score = StringField(validators=[DataRequired()])
add_score = SubmitField()
def __init__(self):
Form.__init__(self)
def validate(self):
if not Form.validate(self):
return False
try:
float(self.score.data)
except ValueError:
self.score.errors.append(
'Score must be a valid number')
return False
if 0 > float(self.score.data) > 100:
self.score.errors.append(
'Score must be in the range 0-100')
return False
return True
问题不在于 NumberRange 验证器,而是 DataRequired 验证器。参见:
TL;DR:DataRequired 将 0 计算为错误,您需要改用 InputRequired 验证器!
我当前的WTForms Number验证器代码如下:
class ScoreForm(Form):
score = FloatField(validators=[DataRequired(), NumberRange(0,100)])
submit = SubmitField()
我希望将分数指定在 0 到 100 之间(包括两者和小数点)。
上面的代码有两个问题:
它不让我输入 0 作为值。这样做会吐出内置错误消息
[This field is required.]
如果我在字段中输入一些字符串,我会收到与上面相同的错误消息,这不是正确的消息。
如何解决这两个问题?
在 FloatField
和 DecimalField
出现了很多奇怪的行为之后,我终于使用了 StringField
并为我的上述用例编写了一个自定义验证器,如下所示:
class ScoreForm(Form):
score = StringField(validators=[DataRequired()])
add_score = SubmitField()
def __init__(self):
Form.__init__(self)
def validate(self):
if not Form.validate(self):
return False
try:
float(self.score.data)
except ValueError:
self.score.errors.append(
'Score must be a valid number')
return False
if 0 > float(self.score.data) > 100:
self.score.errors.append(
'Score must be in the range 0-100')
return False
return True
问题不在于 NumberRange 验证器,而是 DataRequired 验证器。参见:
TL;DR:DataRequired 将 0 计算为错误,您需要改用 InputRequired 验证器!