我正在将webapp2 auth实现到我的代码库中,并希望了解这个怪癖:
在models.py中,我看到它声明:
为了在创建新
User
时确保属性唯一性,我们首先创建 这些属性的Unique
记录,如果一切顺利,我们可以 保存新的User
记录::
对我而言,这似乎是一种非常复杂的测试唯一性的方法,说实话,我并不完全理解“create_multi”函数正在做什么....这可能就是为什么我在这里有点困惑。我的思考过程是:
只需快速查询以查看数据存储区中是否存在用户名(auth.id)。如果没有那么put()。
我知道我错过了什么,有人可以向我解释一下吗?我有一种预感,也许这些代码是在那里输入的,这样如果人们想要的话就很容易拥有多个唯一身份?
谢谢!
P.S。显然,webapp2代码的灵感来自this piece of coding。
答案 0 :(得分:5)
我们在该模型中有两个唯一值:username和auth_id。
因此,由于所有用户都不属于同一个实体组,因此我们无法使用事务检查唯一性。这就是Unique模型存在的原因:确保这两个属性的唯一性。
我同意,这很复杂。但你还会怎么做呢? (诚实的问题)
更新:有关为何选择唯一性的详细信息。
(安全地)实施数据存储唯一约束的方法只有两种:事务或使用实体密钥。事务限制为最多5个实体组,使用密钥限制为1个唯一属性。如果不想使用密钥(因为,例如,该属性可能是可变的,如电子邮件),或者真的需要更多的独特属性 同样,你需要为唯一性检查创建一个专门的类型。或多或少在您发布的链接中执行的操作。