from django.views.decorators.cache import cache_page 用起来很方便,直接在view的function前面加上一个@cache_page(3600),就能缓存一个小时,完全不需要多余代码

但是这个cache函数管杀不管埋,如果缓存了列表页,那么修改/创建新的item的时候,如何更新列表页的缓存是个大问题. 翻开cache_page代码看了很久,它生成key的方法非常繁琐,先要缓存request的header,然后还要对url进行hash,要自己完全替代这个函数,还需要写更复杂的Middleware,最后找到一个函数,一般情况下够用了

1
2
3
4
5
6
7
8
9
from django.core.cache import cache
from django.http import HttpRequest
from django.utils.cache import get_cache_key
def expire_page(path):
	request = HttpRequest()
	request.path = path
	key = get_cache_key(request)
	if cache.has_key(key):
		cache.delete(key)

注意: get_cache_key用的是 request.get_full_path(),在url不使用动态参数的情况下,get_full_path() = path 所以这个函数是不完备的,凑后能用