如何与 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
如何遍历 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