4

我正在将 webapp2 auth 实现到我的代码库中,并想了解这个怪癖:

models.py中,我看到它指出:

创建新的时,为了保证属性的唯一性User,我们首先 Unique为这些属性创建记录,如果一切顺利,我们可以保存新的User记录:

对我来说,这似乎是一种非常复杂的测试唯一性的方法,老实说,我并不完全理解“create_multi”函数在做什么......这可能是我在这里有点困惑的原因。我的思考过程是:

只需快速查询一下用户名 (auth.id) 是否存在于数据存储中。如果没有,那么 put()。

我知道我遗漏了一些东西,有人可以向我解释一下吗?我有一种预感,也许代码是在那里输入的,这样如果人们想要的话,很容易拥有多个唯一性?

谢谢!

ps 显然 webapp2 代码是受这段代码启发

4

1 回答 1

5

我们在该模型中有两个唯一值:username 和 auth_id。

因此,由于所有用户不属于同一个实体组,我们无法使用事务检查唯一性。这就是 Unique 模型存在的原因:确保这两个属性的唯一性。

我同意,这很复杂。但是你会怎么做呢?(诚​​实的问题)

更新:有关为什么以这种方式检查唯一性的更多详细信息。

只有两种方法可以(安全地)强制执行数据存储唯一约束:事务或使用实体键。事务最多限制为 5 个实体组,并且使用密钥您可以限制为 1 个唯一属性。如果不想使用密钥(因为,比如说,属性可以是可变的,就像电子邮件一样),或者您确实需要更多相同类型的唯一属性,则需要创建一个专门用于唯一性检查的类型. 您发布的链接中或多或少做了什么。

于 2012-03-16T23:51:36.493 回答