首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PonyORM -以编程方式设置字段值

PonyORM -以编程方式设置字段值
EN

Stack Overflow用户
提问于 2021-02-20 20:21:32
回答 1查看 23关注 0票数 2

我有一个User类,它的结构如下:

代码语言:javascript
复制
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字段值。

代码语言:javascript
复制
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值?

EN

回答 1

Stack Overflow用户

发布于 2021-02-24 08:54:44

我只是遇到了类似的情况,也使用了Flask-Loginpony

您当然可以使用password_hash = Optional(str),但如果您不想这样做,您可以考虑覆盖模型__init__,给它一个简单的密码,然后在传递它之前生成散列:

代码语言:javascript
复制
def __init__(self, *args, password, **kwargs):
    kwargs['password_hash'] = generate_password_hash(password)
    super().__init__(*args, **kwargs)

在您的示例中,您可以像这样简单地调用它:

代码语言:javascript
复制
new_user = User(
        vorname=form.vorname.data,
        nachname=form.nachname.data,
        email=form.email.data,
        role=form.role.data,
        password=form.password.data,
    )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66291456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档