【发布时间】:2021-06-06 12:19:13
【问题描述】:
def clean_clean 电子邮件不起作用。这个函数应该做两件事,如两个 if 所示。第一个检查是否没有对字段进行更改,如果没有进行任何更改,则验证不会开始,这目前有效。第二个 if 应该检查输入的电子邮件是否已经存在,如果存在则显示验证错误消息。第二个如果没有,如果输入现有电子邮件,这会导致 SQL IntegrityError。
Model.py - 表格
class User(db.Model, TimestampMixin, UserMixin):
__tablename__ = 'user'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), nullable=False, unique=True)
email = db.Column(db.String(80), nullable=False, unique=True)
password_hash = db.Column(db.String(128))
first_name = db.Column(db.String(20), nullable=False)
last_name = db.Column(db.String(20), nullable=False)
forms.py
class EditUserForm(FlaskForm):
first_name = StringField('First Name', validators=[DataRequired()])
last_name = StringField('Last Name', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
password2 = PasswordField(
'Repeat Password', validators=[DataRequired(), EqualTo('password')])
update = SubmitField('Update')
cancel = SubmitField('Cancel')
def clean_email(self):
cd = self.cleaned_data
email = cd(email=email.data)
# if email is not modified, so don't start validation flow
if self.instance.pk is not None and self.instance.email == email:
return cd
# check email is unique or not
if User.objects.filter(email=email).exists():
raise ValidationError("Email address already exists!".format(email))
return cd
输入现有电子邮件时出现 SQL 错误
sqlite3.IntegrityError: UNIQUE constraint failed: user.email
【问题讨论】:
-
能否提供更多细节,例如 SQL 错误?