wtforms Flask 中的验证器 Python
Validators in wtforms Flask Python
我尝试在我的注册页面中将数字范围添加到密码中,以确保我的密码列中至少有一个数字,当我删除数字范围时,它工作正常,但如果我再次添加它, 它会抛出一个错误
从 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
问题是 NumberRange()
只接受数字类型(整数、浮点数、双精度等),但在传递字符串时总是会失败。这就是您的错误消息告诉您的内容,“输入必须是实数,而不是字符串”。
解决方法:使用Regexp()
Regexp()
将允许您将用户的输入与正则表达式进行比较。您可以根据需要将其设置得尽可能复杂,但要解决您当前对“至少一位数”的要求,以下应该可行:
Regexp('/d')
最后一个音符。我注意到您使用的是 DataRequired()
,WTForms 文档建议改用 InputRequired()
,除非在我看不到的特定用例中适用。
我尝试在我的注册页面中将数字范围添加到密码中,以确保我的密码列中至少有一个数字,当我删除数字范围时,它工作正常,但如果我再次添加它, 它会抛出一个错误
从 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
问题是 NumberRange()
只接受数字类型(整数、浮点数、双精度等),但在传递字符串时总是会失败。这就是您的错误消息告诉您的内容,“输入必须是实数,而不是字符串”。
解决方法:使用Regexp()
Regexp()
将允许您将用户的输入与正则表达式进行比较。您可以根据需要将其设置得尽可能复杂,但要解决您当前对“至少一位数”的要求,以下应该可行:
Regexp('/d')
最后一个音符。我注意到您使用的是 DataRequired()
,WTForms 文档建议改用 InputRequired()
,除非在我看不到的特定用例中适用。