【问题标题】:Validators in wtforms Flask Pythonwtforms Flask Python 中的验证器
【发布时间】:2021-12-09 17:05:51
【问题描述】:

我尝试在我的注册页面中将数字范围添加到密码,以确保我的密码列中至少有一个数字,当我删除数字范围时,它工作正常,但如果我再次添加它,它报错

从 flask_wtf 导入 FlaskForm 从 wtforms 导入 StringField、PasswordField、SubmitField、BooleanField from wtforms.validators import DataRequired, length, Email, EqualTo, NumberRange

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(),
                            length(min=2, max=20)] )
    email = StringField('Email', validators=[DataRequired(),
                            Email(message="Please input a valid email address")])
    password = PasswordField('Password', validators=[DataRequired(),
                                length(min=5, max=12), NumberRange(min=1, max=3)])
    confirm_password = PasswordField('Confirm_Password',
                                    validators=[DataRequired(),
                                    EqualTo('password', message="Your password does not match")] )
    submit = SubmitField('SignUp')

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(),
                            Email()])
    password = PasswordField('Password', validators=[DataRequired() ])
    remember = BooleanField('Remember me')

    submit = SubmitField('Login')

这是我尝试添加数字范围时的错误

TypeError
TypeError: must be real number, not str

【问题讨论】:

    标签: python flask-wtforms wtforms


    【解决方案1】:

    问题是NumberRange() 只接受数字类型(整数、浮点数、双精度等),但在传递字符串时总是会失败。这就是您的错误消息告诉您的内容,“输入必须是实数,而不是字符串”。

    解决方法:使用Regexp()

    Regexp() 将允许您将用户的输入与正则表达式进行比较。您可以根据需要将其复杂化,但要解决“至少一位数”的当前要求,以下应该可行: Regexp('/d')

    最后一点。我注意到您使用的是DataRequired(),WTForms 文档建议改用InputRequired(),除非在我看不到的特定用例中适用。

    参考:https://wtforms.readthedocs.io/en/2.3.x/validators/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2014-01-21
      • 2023-02-02
      相关资源
      最近更新 更多