我想将用户存储在自定义用户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()
所以,如果我是对的,我可以完全删除实体中的电子邮件,只将其用作密钥。
答案 0 :(得分:0)
我没有看到任何好处。
由于您已将电子邮件存储为主ID,因此可以为任何user
实例检索该电子邮件:
email = user.key.id()