繁体   English   中英

如何在Flask-Admin中与单个表单字段进行交互?

[英]How to interact with individual form fields in Flask-Admin?

如何遍历Flask-Admin中可用的某些表单字段?

通常,当用户提交我为网站创建的自定义表单之一时,我会使用flask_bcrypt哈希密码。 但是,如果我使用flask-admin更改了特定用户的密码,那将是行不通的,因为它不会将新密码保存为哈希。

我想先哈希新密码,然后再将其存储在数据库中。

我怎样才能实现这个目标? 我在网上看过但什么也没找到。 那根本不可能吗? 我曾尝试查看文档,但实际上找不到任何有用的文档。

假设这是我的数据模型:

class User(db.Model , UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)

这是我不使用flask-admin通常使用的注册途径:

@app.route("/register", methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        hashed_pass=bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        user = User(username=form.username.data,email=form.email.data, password=hashed_pass)
        db.session.add(user)
        db.session.commit()

我想从管理员模型视图获取密码字段,并与上述代码相同。

在查看SQLAlchemy文档时,我找到了一种解决此问题的方法,只需设置一个事件侦听器,该事件侦听器会在编辑或更改密码值时启动。

@event.listens_for(User.password, 'set')
def hashPass(target, value, oldvalue, initiator):
    if value != oldvalue:
        return bcrypt.generate_password_hash(value).decode('utf-8')
    else: 
        return oldvalue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM