将电子邮件地址存储为模型ID或实体属性

时间:2014-03-13 17:18:35

标签: python app-engine-ndb

我想将用户存储在自定义用户NDB模型上,我想要使用的主要唯一密钥是电子邮件地址,因此我不知道使用以下模型是否是一个不错的选择:

class Users(ndb.Model):
    uid = ndb.StringProperty(required=True)                                                                                                                     
    user = ndb.UserProperty(auto_current_user_add=True) 
    name = ndb.StringProperty()
    password = ndb.StringProperty()

请注意,我从属性中删除了电子邮件,这迫使我使用以下内容添加用户:

Users(id="any@email.tld")

或通过执行查询:

user = Users.get_by_id('any@email.tld')

但是想知道是否还存储了电子邮件'作为财产可以给我一些好处,例如使用以下模型:

class Users(ndb.Model):
    email = ndb.StringProperty(required=True)
    uid = ndb.StringProperty(required=True)                                                                                                                     
    user = ndb.UserProperty(auto_current_user_add=True) 
    name = ndb.StringProperty()
    password = ndb.StringProperty()

我想将电子邮件用作唯一密钥的原因是因为我主要使用OpenID进行身份验证。

更新

我做了一些测试,如果我想通过电子邮件搜索,似乎我可以这样做:

user_key = ndb.Key('Users', 'any@email.tld')

query = Users.query(Users.key == user_key, name = 'foo').get()

所以,如果我是对的,我可以完全删除实体中的电子邮件,只将其用作密钥。

1 个答案:

答案 0 :(得分:0)

我没有看到任何好处。

由于您已将电子邮件存储为主ID,因此可以为任何user实例检索该电子邮件:

email = user.key.id()