数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算
security库中 generate_password_hash(password,method…)函数将原始密码作为输入,以字符串形式输出密码的散列值
check_password_hash(hash,password)函数检查给出的hash密码与明文密码是否相符
应用在用户模型中:
需要验证密码时就只需调用User类的check_password_hash(self,password)方法,如果返回true则进行下一步操作
计算密码散列值的函数通过名为 password 的只写属性实现。设定这个属性的值时,赋值方法会调用 Werkzeug 提供的generate_password_hash() 函数,并把得到的结果赋值给password_hash 字段。如果试图读取 password 属性的值,则会返回错误,原因很明显,因为生成散列值后就无法还原成原来的密码了。 verifypassword 方 法 接 受 一 个 参 数(即密码),将其传给Werkzeug提供的check password_hash()函数,和存储在 User 模型中的密码散列值进行比对。如果这个方法返回True ,就表明密码是正确的。
从上图可以看出即使不同用户使用相同的密码,生成的密码散列值也完全不相同