如何在普通视图功能中更新tastypie缓存?

时间:2013-05-28 06:12:11

标签: django view memcached tastypie

tastypie api不支持上传文件,所以我必须使用普通视图功能,查看我的other question

这是我的图片资源

 class ImageResource(ModelResource):
     album = fields.ForeignKey(AlbumResource, 'album')
     upload_by = fields.ForeignKey(UserResource, 'upload_by')

     class Meta:
         always_return_data=True
         filtering = {
                 "album": ('exact',),
                  }
         queryset = Image.objects.all()
         cache = SimpleCache(timeout=100)
         resource_name = 'image'
         authorization = ImageAuthorization()

现在假设我在普通视图功能中上传图像,因为我将缓存超时设置为100秒,浏览器不会在100秒内更新查询。

我想要的是浏览器在上传图片后立即更新查询,如果没有任何更改,请将缓存超时保持为100秒。这必须在普通视图功能中完成。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您愿意,可以手动清除缓存。 Tastypie的缓存键看起来像这样(如果你使用的是simpleCache)

def generate_cache_key(self, *args, **kwargs):
    """
    Creates a unique-enough cache key.

    This is based off the current api_name/resource_name/args/kwargs.
    """
    smooshed = []

    for key, value in kwargs.items():
        smooshed.append("%s=%s" % (key, value))

    # Use a list plus a ``.join()`` because it's faster than concatenation.
    return "%s:%s:%s:%s" % (self._meta.api_name, self._meta.resource_name, ':'.join(args), ':'.join(smooshed))

(直接来自目前第1031行的the code

你可以在shell中玩游戏,以确保你正在寻找你正在寻找的对象。一旦你有了这个,只需在上传文件时删除该条目。