flask(三)用户登录密码加密
修改项目文件中apps/admin/models.py文件
from werkzeug.security import generate_password_hash,check_password_hash
from exts import db
class Users(db.Model):
__tablename__='fm_user'
uid = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(50),nullable=False) # 用户名不能为空
email = db.Column(db.String(50),nullable=False,unique=True) # 邮箱不能为空,而且必须唯一
_password = db.Column(db.String(100),nullable=False) # 密码不能为空
def __init__(self,username,password,email):
self.username=username
self.password=password
self.email=email
## 获取密码
@property
def password(self):
return self._password
## 设置密码
@password.setter
def password(self,raw_password):
self._password=generate_password_hash(raw_password) # 密码加密
## 检查密码
def chek_password(self,raw_password):
result = check_password_hash(self.password,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同等加密后对比,即可返回布尔值,完成校验。