我该如何在python中执行RedisDict?

时间:2012-10-22 18:05:45

标签: python redis wsgi

我正在做a really simple API测试为python呼叫spore客户端代。

在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环境中是否足够?

2 个答案:

答案 0 :(得分:1)

假设方法dict返回字典,为什么不这样做:

dict_i_wanted = todos.dict()

如果您必须支持dict_i_wanted = dict(todos),请添加此方法:

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

答案 1 :(得分:0)

如果您想创建自己的“dict- like”类,则需要实现字典协议。最简单的方法是继承collections.Mapping并实现表中提到的抽象方法。您需要实现那些与相应的dict方法相同的行为;例如__iter__应该返回所有(key, value)元组的迭代。 (这是让dict(todos)工作所需的一种方法。没有像您尝试使用dict方法那样强制使用dict()的神奇方法。)