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'))
原文地址:https://www.cnblogs.com/zengsf/p/10012629.html