2015-06-19 32 views

回答

3

我看到兩種方式如何做到這一點。

首先是繼承UserToken類,使得user成爲索引屬性。然後,您可以將token_model類屬性設置爲用戶類中的新標記模型。下面是代碼:

class MyToken(UserToken): 
    user = ndb.StringProperty(required=True) 

class MyUser(User): 
    token_model = MyToken 
    # etc. 

不要忘記設置使用webapp2將用戶類的用戶模型,如果你不這樣做已經:

webapp2_config = { 
    "webapp2_extras.auth": { 
     "user_model": "models.MyUser" 
    }, 
    # etc. 
} 

app = webapp2.WSGIApplication(routes, config=webapp2_config) 

第二種方式是根據令牌密鑰名稱進行復雜的數據存儲查詢。由於鍵名稱形式爲<user_id>.<scope>.<random>,因此可以檢索以特定用戶ID開頭的所有實體。看看代碼:

def query_tokens_by_user(user_id): 
    min_key = ndb.Key(UserToken, "%s." % user_id) 
    max_key = ndb.Key(UserToken, "%s/" % user_id) #/is the next ASCII character after . 
    return UserToken.query(UserToken.key > min_key, UserToken.key < max_key) 

這使用了按鍵名查詢按字典順序工作的事實。