flask中利用from来进行对修改修改时旧密码的验证
在flask中,肯定是post提交个from进行密码验证。还有一定就是修改密码肯定是登录之后才能进行对密码的修改,这么说,在浏览器中的session中一定会有用户的信息,可以通过相对应的信息去获取到相对应的用户密码。
这里需要对werkzeug库里面的两个方法有所了解:
数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算,security库中 generate_password_hash(password,method...)函数将原始密码作为输入,以字符串形式输出密码的散列值,check_password_hash(hash,password)函数检查给出的hash密码与明文密码是否相符。
第一步:
在数据模型中创建一个函数
def check_pwd(self, pwd): from werkzeug.security import check_password_hash return check_password_hash(self.userpwd, pwd)
第二步:
在from中的pwdForm下可以调用在模型中定义好的检查密码的函数
def validate_old_pwd(self, field): from flask import session pwd = field.data name = session["admin"] admin = Admin.query.filter_by(name=name).first() if not admin.check_pwd(pwd): raise ValidationError("旧密码错误!")
第三步:
检验通过,还要存储到数据库中,就要用到generate_password_hash了
form = PwdForm() if form.validate_on_submit(): data = form.data admin = Admin.query.filter_by(name=session["admin"]).first() from werkzeug.security import generate_password_hash admin.pwd = generate_password_hash(data["new_pwd"]) db.session.add(admin) db.session.commit() flash("修改密码成功,请重新登录!", "ok") return redirect(url_for('admin.logout'))