# models.py
from werkzeug.security import generate_password_hash,check_password_hash
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True) #id列
username = db.Column(db.String(64), unique=True, index=True) #username列
role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) #role_id列
password_hash = db.Column(db.String(128)) #密码hash列
@property
def password(self): #访问password属性
raise AttributeError('password is not a readable attribute')
@password.setter
def password(self,password): #设置password属性
self.password_hash = generate_password_hash(password) #默认加‘盐’了
def verify_password(self,password): #验证密码
return check_password_hash(self.password_hash,password)
def __repr__(self):
return '<User %r>' % self.username
使用Werkzeug实现密码散列,最关键的是使用其中security模块的generater_password_hash()和check_password_hash()。
1、generate_password_hash(password, method=pbkdf2:sha1, slat_length=8)
method指定哈希变化的算法,默认sha1,salt_length指定‘盐的长度’,默认是8位。password是必须指定的。
返回计算得出的128位哈希值
2、check_password_hash(hash,password)
hash是密码散列值(一般存于数据库),password是输入需比较的密码。
返回的是True或者False