Python 清除每个视图缓存

Python 清除每个视图缓存,python,django,Python,Django,我有几个视图,每个视图都有缓存表 以及在预保存回调时删除缓存 现在我每次都删除每个缓存 有没有办法一个一个地删除每个表 class ArticleViewSet(viewsets.ModelViewSet): queryset = Article.objects.all() @method_decorator(cache_page(None)) @method_decorator(vary_on_cookie) def list(self,request,*arg

我有几个视图,每个视图都有缓存表

以及在预保存回调时删除缓存

现在我每次都删除每个缓存

有没有办法一个一个地删除每个表

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    @method_decorator(cache_page(None))
    @method_decorator(vary_on_cookie)
    def list(self,request,*args,**kwargs):

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    @method_decorator(cache_page(None))
    @method_decorator(vary_on_cookie)
    def list(self,request,*args,**kwargs):

@receiver(pre_save, sender=Article)
def cache_delete_callback(sender, **kwargs):
    print("cache delete")
    from django.core.cache import cache;cache.clear()// want to delete only Article cache

@receiver(pre_save, sender=Item)
def cache_delete_tweet_callback(sender, **kwargs):
    print("clear tweet cache")
    from django.core.cache import cache;cache.clear() // wan to delete only Item Cache
缓存设置在页面(视图)上,而不是单个对象上,如

每个视图缓存与每个站点缓存一样,都是从URL中键入的。 如果多个URL指向同一视图,则会缓存每个URL 分别地如果您的URLconf看起来像 这:

URL模式=[ 路径('foo/',my_view),]然后对/foo/1/和/foo/23/的请求将被单独缓存,正如您所期望的那样。但是一年一次 已请求特定URL(例如/foo/23/),后续 对该URL的请求将使用缓存

可见,缓存键实际上是URL路径,所以您可以使用cache.delete(key)删除它们中的每一个,其中key是URL。下面是一系列的东西

cache.delete(
    reverse(view_name, args=[item_id]
)