3

私はおいしいキャッシングドキュメントを見て、独自の単純なキャッシングを設定しようとしていますが、キャッシュが呼び出されていないようです。http :// localhost:8000 / api / poll /?format = jsonにアクセスすると、おいしいパイで生成されたjsonを取得しますが、キャッシュクラスからの出力を取得しません。

from tastypie.resources import ModelResource
from tastypie.cache import NoCache
from .models import Poll


class JSONCache(NoCache):
    def _load(self):
        print 'loading cache'
        data_file = open(settings.TASTYPIE_JSON_CACHE, 'r')
        return json.load(data_file)

    def _save(self, data):
        print 'saving to cache'
        data_file = open(settings.TASTYPIE_JSON_CACHE, 'w')
        return json.dump(data, data_file)

    def get(self, key):
        print 'jsoncache.get'
        data = self._load()
        return data.get(key, None)

    def set(self, key, value, timeout=60):
        print 'jsoncache.set'
        data = self._load()
        data[key] = value
        self._save(data)


class PollResource(ModelResource):
    class Meta:
        queryset = Poll.objects.all()
        resource_name = 'poll'
        cache = JSONCache()
4

1 に答える 1

7

Tastypieは、tastypie.resources行の前後でリストを自動的にキャッシュしないよう1027です。

def get_list(self, request, **kwargs):

    # ...

    # TODO: Uncached for now. Invalidation that works for everyone may be
    #       impossible.
    objects = self.obj_get_list(
        request=request, **self.remove_api_resource_names(kwargs))

    # ...

、一方、詳細(線の周り1050):

def get_detail(self, request, **kwargs):

   # ...

   try:
       obj = self.cached_obj_get(
           request=request, **self.remove_api_resource_names(kwargs))

   # ...

obj_get_list...前のスニペットでは、の代わりにが呼び出されることに注意してくださいcached_obj_get_list。おそらく、オーバーライドget_listして使用cached_obj_get_listすると、ここでもキャッシュを使用できるようになりますか?

http://localhost:8000/api/poll/<pk>/?format=jsonこれで、デフォルトでは(詳細ビュー)のクラスから出力が得られますが、 http://localhost:8000/api/poll/?format=json(リストビュー)の出力は得られない可能性があります。

于 2012-04-19T07:41:43.850 に答える