flask(三)使用者登入密碼加密
阿新 • • 發佈:2022-01-18
修改專案檔案中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同等加密後對比,即可返回布林值,完成校驗。