我有一个Django(1.8.17)应用程序,我使用Tastypie(0.13.3)作为REST API框架。
我有一些非常简单的资源,我使用SimpleCache
将它们缓存15分钟。
from tastypie.resources import ModelResource
from my_app.models import MyModel
from tastypie.cache import SimpleCache
class MyModelResource(ModelResource):
cache = SimpleCache(timeout=900)
class Meta:
queryset = MyModel.objects.all()
问题:当我通过PUT
请求更新资源时,资源会在DataBase中更新,但不会从缓存中失效,所以我继续获取旧数据15分钟,这是不方便,我希望当资源更新时,它将从DB中获取并再次缓存。是否有人面临同样的问题?
答案 0 :(得分:1)
经过长时间的搜索而没有找到任何东西,我有了一个主意!通过在每次更新时从缓存中删除对象来覆盖PUT
方法,这是从头开始应该发生的自然方式。
我发现Tastypie的SimpleCache正在使用Django的核心缓存(至少在这种情况下;想想设置),所以这就是我解决问题的方法:
from tastypie.resources import ModelResource
from my_app.models import MyModel
from tastypie.cache import SimpleCache
from django.core.cache import cache
class MyModelResource(ModelResource):
cache = SimpleCache(timeout=900)
class Meta:
queryset = MyModel.objects.all()
def put_detail(self, request, **kwargs):
# Build the key
key = "{0}:{1}:detail:pk={2}".format(kwargs['api_name'], kwargs['resource_name'], kwargs['pk'])
cache.delete(key)
return super(MyModelResource, self).put_detail(request, **kwargs)