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同等加密后对比,即可返回布尔值,完成校验。

posted @ 2022-01-18 16:45  、阿红吖  阅读(369)  评论(0编辑  收藏  举报