位于
from django.views.decorators.cache import cache_page
的這個
cache_page
是django提供的緩存頁面的方法,首先需要在
settings.py
中加入配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": 'redis://127.0.0.1:6379/1',
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
複制
也需要安裝依賴包
django-redis
pip install django-redis
複制
然後在views.py中的方法加入這個裝飾器就可以對頁面進行緩存了。
@cache_page(60 * 10)
def index(request):
...
複制
雖然使用很友善,但是這個cache_page生成的key 非常的長,而且不能自定義緩存的key,在使用上帶來一些不便。
是以下面介紹如何 讓@cache_page支援自定義的key,我們這裡不會對django的源碼修改。我們自己添加一個utils.py類。寫一個類似的@cache_page即可。代碼如下:
from django.core.cache import CacheHandler
from django.conf import settings
alias = settings.CACHE_MIDDLEWARE_ALIAS
caches = CacheHandler()
cache = caches[alias]
def cache_page(timeout=-1, cache_key=None):
"""
頁面緩存
:param cache_key:
:param timeout:
:return:
"""
def _deco(view_func):
@wraps(view_func)
def _handler(request, *args, **kw):
key = cache_key
if not key:
key = "{}://{}{}".format(request.scheme, request.META.get("HTTP_HOST"), request.path)
response = cache.get(key)
if response is None:
response = view_func(request, *args, **kw)
cache.set(key, response, timeout)
return response
return _handler
return _deco
複制
使用:
@cache_page(timeout=9999,cache_key='123')
def index(request):
...
複制
如果預設不指定key,就使用url來作為key。非常友善