范围0到100之间的数字验证

时间:2015-12-22 19:08:58

标签: python wtforms flask-wtforms

我目前的WTForms Number验证码如下:

class ScoreForm(Form):
    score = FloatField(validators=[DataRequired(), NumberRange(0,100)])
    submit = SubmitField()

我希望分数指定在0到100之间(包括允许的小数和小数)。

上述代码存在两个问题:

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

    [This field is required.]

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

  3. 如何纠正这两个问题?

2 个答案:

答案 0 :(得分:1)

经过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

答案 1 :(得分:0)

问题不是NumberRange验证程序,而是DataRequired验证程序。参见:

https://stackoverflow.com/a/25335781/1194335

TL; DR:DataRequired将0评估为false,您将需要使用InputRequired验证器!