为什么webapp2 auth模型使用唯一的表?

ice*_*ire 4 google-app-engine webapp2

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

models.py中,我看到它表明:

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

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

只需快速查询以查看数据存储区中是否存在用户名(auth.id).如果没有那么put().

我知道我错过了什么,有人可以向我解释一下吗?我有一种预感,也许代码是在那里输入的,这样,如果人们想要,有多个唯一身份就很容易?

谢谢!

ps显然,webapp2代码的灵感来自于这段编码.

mor*_*aes 5

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

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

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

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

(安全地)实施数据存储唯一约束的方法只有两种:事务或使用实体密钥.事务限制为最多5个实体组,使用密钥限制为1个唯一属性.如果不想使用密钥(因为,例如,该属性可以是可变的,如电子邮件),或者您确实需要更多类似的独特属性,则需要创建一个专门用于唯一性检查的类型.或多或少在您发布的链接中执行的操作.