0

我們使用GAE做一個社交網絡,而當我們要創建用戶,我們需要保存聯繫人的有關Facebook,微博等數據......保存額外的聯繫人數據的數據存儲

這個額外的接觸數據必須由管理員管理,因此如果管理員添加「Whatsapp」,則所有用戶都必須出現「Whatsapp」字段,如果管理員刪除了Facebook數據,則必須刪除所有用戶的Facebook信息。

保存這些數據的最佳選擇是什麼,考慮最有效的方式,例如,獲取所有用戶的臉書,刪除所有用戶的twitter ...由管理員?

謝謝

回答

2

有很多方法可以解決這個問題。其中之一是有一個配置模型,如(假設蟒蛇)...

class Config(db.Model): 
    """ singleton model """ 
    twitter = db.BooleanProperty(default=False) 
    facebook = db.BooleanProperty(default=False) 
    whatsapp = db.BooleanProperty(default=False) 

而且對每個社會的用戶名您的剖面模型不同的領域...

class Profile(db.Model): 
    name = db.StringProperty()  # users name 
    twitter = db.StringProperty() # store twitter username here 
    facebook = db.StringProperty() # store facebook username here 
    whatsapp = db.StringProperty() # store whatsapp username here 

當你呈現配置文件發送到客戶端,請檢查Config類以查看已啓用的社交字段,並僅顯示這些字段。

要處理刪除操作,您可能需要編寫一個cron作業以迭代所有配置文件並刪除配置模型上禁用的任何數據。

希望這有助於

0

你當然應該存儲包含用戶的實體組中的用戶的特定數據的所有實體。這使您可以使用ancestor queries來檢索和操作這些實體,它們的性能優於非祖先查詢。

要使詳細實體成爲用戶實體組的一部分,您只需使用parent參數創建它們即可。例如:

class TwitterData(db.Model): 
    twitter_name = db.StringProperty 

def addTwitterData(user, twitter_name): 
    # User is an instance of users.User 
    new_twitter_entity = TwitterData(parent=user) 
    new_twitter_entity.twitter_name = twitter_name 
    new_twitter_entity.put() 

現在,我可以得到用戶的數據是這樣的:

twitter_accounts = TwitterData.all().ancestor(user).fetch(1000) 

此外,您還可以使用無類型祖先查詢來獲取所有實體的用戶的實體組:

all_networks = db.Query() 
all_networks.ancestor(user).fetch(1000) 
# Now, ancestor has all of user's Twitter, Facebook, Myspace accounts. 

這種方法的優勢之一是它允許您的用戶在任何各種服務上擁有多個帳戶。

如果您需要爲不同的社交網站存儲的數據太多而無法通過單個簡單模型提供,則可以使用Expando類來存儲存儲不同類型數據的實體。

相關問題