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

时间:2012-03-15 08:58:10

标签: google-app-engine webapp2

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

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

  

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

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

  

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

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

谢谢!

P.S。显然,webapp2代码的灵感来自this piece of coding

1 个答案:

答案 0 :(得分:5)

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

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

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

更新:有关为何选择唯一性的详细信息。

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