0

私はPython用のSPOREクライアント生成をテストするために本当にシンプルなAPIを実行しています。

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)dictを返すことができますか?WSGI環境ではそれで十分ですか?

4

2 に答える 2

1

そのメソッドが辞書を返すと仮定してdict、これを実行しないのはなぜですか。

dict_i_wanted = todos.dict()

サポートする必要がある場合はdict_i_wanted = dict(todos)、次のメソッドを追加します。

def __iter__(self):
    return self.dict().iteritems()
于 2012-10-22T18:14:41.277 に答える
0

独自の「dict-like」クラスを作成する場合は、辞書プロトコルを実装する必要があります。collections.Mapping最も簡単な方法は、表に記載されているメソッドを継承して実装することです。dict対応するメソッドと同じように動作するようにそれらを実装する必要があります。たとえば、すべてのタプル__iter__に対して反復可能を返す必要があります。(key, value)(これはあなたが仕事をするために必要な1つの方法です。あなたがあなたの方法でやろうとしdict(todos)たように強制する魔法の方法はありません。)dictdict()

于 2012-10-22T18:12:48.597 に答える