如何解决Flask 自定义 ValidationError 不会显示错误
我正在研究 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.')
感谢您阅读我的问题!
解决方法
问题最终是我的表单模板 - 我犯了通过“错误”而不是“form.username.errors”进行迭代的错误。我认为这不是问题,因为错误正确地出现在页面上以创建新用户 - 但这是一个不同的页面(这很明显,回想起来......)。
不正确的模板:
{% for error in errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
更正的模板:
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。