django删除视图缓存


django中可以使用cache_page的方式来缓存视图,但是如何删除指定视图的缓存呢?在文档中没找到清除的方式,但是在Google的时候找到了解决方案,我自己本地测试可以使用,不确定将来的版本会不会无效,下面先介绍下解决办法: 核心功能是这些:

def expire_view_cache(path, servername, serverport, key_prefix=None):
    from django.http import HttpRequest
    from django.utils.cache import get_cache_key

    request = HttpRequest()
    request.META = {'SERVER_NAME': servername, 'SERVER_PORT': serverport}
    request.path = path

    key = get_cache_key(request, key_prefix=key_prefix, cache=cache)
    if key:
        if cache.get(key):
            cache.delete(key)
        return True
    return False

其实就是构造一个HttpRequest对象,然后调用Django内部的get_cache_key来获得缓存key。 调用方式:

#site也可以直接指定,也就是当前站点的domain name
from django.contrib.sites.models import Site
site = Site.objects.get_current().domain
#path为要删除的视图缓存的路径,key_prefix为使用cache_page时指定的key_prefix
expire_view_cache(path, servername=site, serverport=port, key_prefix='blogdetail')