2012-10-22 44 views
0

我在做a really simple API來測試爲python呼叫SPORE客戶端。我應該如何在Python中做一個RedisDict?

在WSGI中,通過服務器保存數據的最佳方法是什麼?

我儘量讓RedisDict這樣:

import json 
from redis import Redis 
redis = Redis() 

class RedisDict: 
    """A redis based dict.""" 

    def dict(self): 
     TODOS = redis.get('TODOS') 
     return json.loads(TODOS) 

    def keys(self): 
     return self.dict().keys() 

    def __getitem__(self, key): 
     return self.dict()[key] 

    def __setitem__(self, key, value): 
     obj = self.dict() 
     obj[key] = value 
     redis.set('TODOS', json.dumps(obj)) 

    def __delitem__(self, key): 
     obj = self.dict() 
     del obj[key] 
     redis.set('TODOS', json.dumps(obj)) 

todos = RedisDict() 

我怎樣才能讓dict(todos)返回一個字典? 在WSGI環境中這足夠嗎?

+0

什麼是 「TODOS」 存儲爲內Redis的?哈希? – Anorov

+0

但它應該是一個HASH – Natim

回答

1

假設dict返回一個字典,爲什麼不這樣做的方法這樣的:

dict_i_wanted = todos.dict() 

如果你必須支持dict_i_wanted = dict(todos)再加入此方法:

def __iter__(self): 
    return self.dict().iteritems() 
0

如果您想製作自己的「dict- like」類,則需要實施字典協議。最簡單的方法是從collections.Mapping繼承並實現表中提到的方法是抽象的。您需要實施這些行爲與相應的dict方法相同;例如__iter__應該返回遍歷所有(key, value)元組的迭代。 (這是你需要做dict(todos)工作的一種方法。有沒有神奇的方法強迫到dict像你試圖用你的dict()方法去做。)

相關問題