2014-03-13 28 views
0

我想存儲用戶在一個自定義的用戶NDB模型,我想使用的主要唯一鍵是電子郵件地址,因此我不知道是否使用以下模型可能是一個不錯的選擇:存儲電子郵件地址作爲模型ID或作爲實體屬性

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="[email protected]") 

或做查詢:

user = Users.get_by_id('[email protected]') 

但想知道如果使用下面的模型還存儲了「電子郵件」作爲一個屬性可以給我一些好處,例如:

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', '[email protected]') 

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

所以如果我是正確的,我可以完全刪除來自實體的電子郵件並僅將其用作密鑰。

回答

0

我沒有看到任何好處。

既然你已經存儲的電子郵件作爲主要的ID,你可以找回任何user例如:

email = user.key.id() 
相關問題