【发布时间】:2021-07-08 23:29:59
【问题描述】:
我正在研究 Miguel Grinberg 的出色 flask mega tutorial,我正在努力弄清楚为什么当表单未能通过自定义验证规则时,我的浏览器、终端或日志文件中没有看到任何错误。
这里是表单类:
class EditProfileForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
about_me = TextAreaField('About me', validators=[Length(min=0, max=140)])
submit = SubmitField('Submit')
def __init__(self, original_username, *args, **kwargs):
super(EditProfileForm, self).__init__(*args, **kwargs)
self.original_username = original_username
def validate_username(self, username):
if username.data != self.original_username:
user = User.query.filter_by(username=self.username.data).first()
if user is not None:
print("There should be a validation error here")
raise ValidationError('Please choose a different username.')
如您所见,我正在打印到控制台以确认正在执行验证器,并且满足条件。我确实在控制台中看到“这里应该有一个验证错误”,但实际上并没有引发验证错误。
这是这个表单的路径:
@app.route('/edit_profile', methods=['GET', 'POST'])
@login_required
def edit_profile():
form = EditProfileForm(current_user.username)
if form.validate_on_submit():
current_user.username = form.username.data
current_user.about_me = form.about_me.data
db.session.commit()
flash('Your changes have been saved.')
elif request.method == 'GET':
form.username.data = current_user.username
form.about_me.data = current_user.about_me
return render_template('edit_profile.html', title='Edit Profile', form=form)
我有另一个表单类,它有一个非常相似的自定义验证器,它引发的 ValidationError 工作得很好。这是其他类的样子......
具有有效 ValidationError 的类:
class RegisterForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = EmailField('E-mail address', validators=[DataRequired(), Email()])
password = PasswordField('Password',
validators=[EqualTo('password_confirm', message='Passwords must match')])
password_confirm = PasswordField('Confirm Password', validators=[DataRequired()])
submit = SubmitField('Register Account')
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user is not None:
raise ValidationError('Please use a different username.')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError('Please use a different email address.')
感谢您阅读我的问题!
【问题讨论】:
-
尝试清除缓存并重新加载
EditProfile页面 -
@GitauHarrison 我尝试清除我的缓存和另一个浏览器。行为没有变化(即故意导致验证失败不会出现错误)。
-
请分享您项目的链接,以便我查看
标签: python flask flask-wtforms validationerror