-
用户模型类示例:
class User(db.Model): """ 用户模型 """ __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(150), nullable=False) email = db.Column(db.String(50), nullable=False, unique=True) join_time = db.Column(db.DateTime, default=datetime.now) _password = db.Column(db.String(150), nullable=False) # 实现密码加密入库,需要重写模型类初始化方法: def __init__(self, username, password, email): self.username = username self.email = email self.password = password # 调用该属性方法,返回加密后的密码值 @property def password(self): # raise Exception('No access') # 禁止访问 return self._password @password.setter def password(self, raw_password): """ 密码加密 xxx.setter需要和上面的方法名称相同 """ self._password = generate_password_hash(raw_password) def check_password(self, raw_password): """ 用于验证后台登录密码是否和数据库一致,raw_password 是后台登录输入的密码 """ result = check_password_hash(self.password, raw_password) # 使用相同的hash加密算法加密raw_password,检测与数据库中是否一致 return result
-
解析:
数据库中存入的加密密码字段为
_password
, 需重写模型类的初始化方法。-
前台密码入库时:
前台传入User类中的密码参数是未加密的
password
,此时初始方法(self.password = password
)默认调用@password.setter
,进行加密后赋值给_password
属性,最后保存至数据库。 -
前台密码校验时:
前台传参至校验方法:
check_password_hash(self.password, raw_password)
,参数self.password
为属性方法的返回值_password
,也就是库中加密后的密码,与前台传入的原始密码raw_password
同等加密后对比,即可返回布尔值,完成校验。
-
Flask密码加密入库&校验
最新推荐文章于 2023-10-13 16:37:50 发布