1

初期化中にキャッシングするために、通常、DB からグローバル定数にデータをロードして保存する方法を教えてください。グローバル定数は後で再び変更されることはありません。読み込み時に DB クエリを作成して定数に入れるだけですか、それとも何らかの遅延読み込みメカニズムを使用しますか?

私が念頭に置いているのは、次のようなグローバル スコープのコードです。

SPECIAL_USER_GROUP = Group.objects.get(name='very special users')
OTHER_THING_THAT_DOESNT_CHANGE = SomeDbEnum.objects.filter(is_enabled=True)
# several more items like this

空のテスト データベースを使用してテストを実行すると、問題が発生しました。オプションは、必要なすべてのデータをフィクスチャに入れることですが、個々のテストを必要のない無関係なデータと結合することは避けたいと思います。

以下は良いスタイルと見なされますか?

@memoize
def get_special_user_group():
    return Group.objects.get(name='very special users')

それとも、一般的な再利用可能なメカニズムが優先されますか?

4

2 に答える 2

2

Django には、使用できるキャッシュ フレームワークがあります。

http://docs.djangoproject.com/en/dev/topics/cache/

必要なことを行う低レベルのキャッシュ API があります。

from django.core.cache import cache
cache.set('my_key', 'hello, world!', 30)
cache.get('my_key')

それを使用するには、次のようにします

if cache.get("key"):
    return cache.get("key")
else:
    value = some_expensive_operation()
    cache.set("key",value)
    return value

このようなものを使用すると、将来の柔軟性が向上します。

于 2011-03-08T17:33:33.073 に答える
0

オプションは、必要なすべてのデータをフィクスチャに入れることです。

いい考え。

しかし、個々のテストを必要のない無関係なデータと結合することは避けたいと思います。

次に、より小さいフィクスチャを定義します。

必要に応じて、TestCasesetUpメソッドを使用して必要なデータベース行を作成します。

于 2011-03-08T19:49:45.987 に答える