我有一个User类,它的结构如下:
class User(UserMixin, db.Entity):
id = PrimaryKey(int, auto=True)
vorname = Required(str)
nachname = Required(str)
email = Required(str)
password_hash = Required(str)
role = Required(str)
def set_password_hash(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)不幸的是,创建一个User对象然后自动存储在数据库中是不可能的,因为我只能从webform获得原始的password字段值。
with db_session:
new_user = User(
vorname=form.vorname.data,
nachname=form.nachname.data,
email=form.email.data,
role=form.role.data,
)
new_user.set_password_hash(form.password.data) # this line is not called, since the creation of new_user fails because of the missing password field.是否可以将保存推迟到数据库?或者使用我的自定义函数来设置password_hash值?
发布于 2021-02-24 08:54:44
我只是遇到了类似的情况,也使用了Flask-Login和pony。
您当然可以使用password_hash = Optional(str),但如果您不想这样做,您可以考虑覆盖模型__init__,给它一个简单的密码,然后在传递它之前生成散列:
def __init__(self, *args, password, **kwargs):
kwargs['password_hash'] = generate_password_hash(password)
super().__init__(*args, **kwargs)在您的示例中,您可以像这样简单地调用它:
new_user = User(
vorname=form.vorname.data,
nachname=form.nachname.data,
email=form.email.data,
role=form.role.data,
password=form.password.data,
)https://stackoverflow.com/questions/66291456
复制相似问题