范围 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 之间(包括两者和小数点)。

上面的代码有两个问题:

  1. 它不让我输入 0 作为值。这样做会吐出内置错误消息

    [This field is required.]

  2. 如果我在字段中输入一些字符串,我会收到与上面相同的错误消息,这不是正确的消息。

如何解决这两个问题?

FloatFieldDecimalField 出现了很多奇怪的行为之后,我终于使用了 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 验证器!