-
forms.py表单中需要验证表单:
1. validate()
2.验证用户是否存在
3.验证相应的信息是否存在
class RegisterForm(FlaskForm):
email = EmailField('邮箱', [DataRequired()])
username = StringField('用户名', [DataRequired(), Length(max=255)])
password = PasswordField('密码', [DataRequired(), Length(min=6)])
# company_name = StringField('公司简称', [DataRequired(), Length(max=255)])
# company_full_name = StringField('公司名称', [DataRequired(), Length(max=255)])
company_id = StringField('所属公司id', [DataRequired(), Length(max=16)])
department_id = StringField('所属部门id', [DataRequired(), Length(max=16)])
phone = StringField('Phone', [DataRequired(), Length(11)])
def validate(self):
check_validate = super().validate()
if not check_validate:
return False
check_email = db.session.query(User).filter_by(email=self.email.data).first()
if check_email:
self.email.errors.append('邮箱已经存在')
return False
return True
- model.py模型中密码设置
from sqlalchemy.ext.hybrid import hybrid_property
class User(TableBase, db.Model):
__tablename__ = 'user_user'
username = db.Column(db.String(255))
password = db.Column(db.String(255))
email = db.Column(db.String(255), unique=True)
@hybrid_property #私有财产,不能私自访问
def password_hash(self):
return self.password
@password_hash.setter #可以写密码,可写不可读
def set_password(self, plaintext):
self.password = bcrypt.generate_password_hash(plaintext) #将hash值存入数据库中
def check_password(self, password):
return bcrypt.check_password_hash(self.password, password) #判断输入的密码是否在数据库中存在,返回True和False