如何在django中手动清除/更新缓存视图

如何在django中手动清除/更新缓存视图,django,caching,Django,Caching,我的目标是缓存一个视图,直到该视图的缓存需要过期的事件发生,否则缓存1小时。这就是我在url.py中的内容 url(r'^get_some_stuff/$', cache_page(60 * 60, key_prefix='get_some_stuff')(views.StuffView.as_view())), 这个很好用。现在,我尝试获取缓存视图以验证是否存在某些内容,我尝试了以下方法: from django.core.cache import cache cache.get('get_

我的目标是缓存一个视图,直到该视图的缓存需要过期的事件发生,否则缓存1小时。这就是我在url.py中的内容

url(r'^get_some_stuff/$', cache_page(60 * 60, key_prefix='get_some_stuff')(views.StuffView.as_view())),
这个很好用。现在,我尝试获取缓存视图以验证是否存在某些内容,我尝试了以下方法:

from django.core.cache import cache
cache.get('get_some_stuff')
但这一结果一无所获。我希望做这样的事情:

from django.core.cache import cache
#relevant event happened
cache.delete('get_some_stuff')
处理缓存的正确方法是什么

我已尝试传递uri路径:

cache.get('/api/get_some_stuff/')
我仍然没有得到任何回报

>>> cache.has_key('/api/get_some_stuff/')
False
>>> cache.has_key('/api/get_some_stuff')
False
>>> cache.has_key('get_some_stuff')
False
我已经回顾了建议的答案,但它根本无法解决根本问题。它看起来不像传递uri路由路径那样简单,因为键在django中有点抽象

Django只允许在预定义的时间内缓存数据,要清除过期的缓存数据,您可能需要使用Django信号通知某些清除缓存的接收器功能

而cache.get、cache.has_key、cache.delete要求传递完整的cache_key,而不是url或密钥前缀。由于django负责密钥,我们无法控制获取或删除数据

如果您使用的是数据库缓存,那么当缓存记录过时时,可以使用原始sql查询从数据库表中删除缓存记录。编写一个查询,该查询表示使用类似于(“%1:views.decorators.cache.cache\u page%”的cache\u键从cache\u表中删除

我在按视图缓存方面也遇到了同样的问题,我选择了按视图缓存。我使用cache.set()缓存了最终结果查询集,好的方面是您可以设置自己的密钥并使用它。

这里有一个关于expire@cache\u的页面

from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.http import HttpRequest
from django.utils.cache import get_cache_key

def expire_page_cache(view, args=None):
    """
    Removes cache created by cache_page functionality. 
    Parameters are used as they are in reverse()
    """

    if args is None:
        path = reverse(view)
    else:
        path = reverse(view, args=args)

    request = HttpRequest()
    request.path = path
    key = get_cache_key(request)
    if cache.has_key(key):
        cache.delete(key)

@BearBrown的可能副本我也尝试过将URI传递给cache.get,但它不是memcached还是database cached?看起来请求应该是view-request,而不是HttpRequest()。