前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django cache_page 装饰器 自定义cache_key

django cache_page 装饰器 自定义cache_key

作者头像
小贝壳
发布2020-03-17 18:28:10
1K0
发布2020-03-17 18:28:10
举报
文章被收录于专栏:贝塔博客贝塔博客

位于from django.views.decorators.cache import cache_page的这个cache_page是django提供的缓存页面的方法,首先需要在settings.py中加入配置

代码语言:javascript
复制
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": 'redis://127.0.0.1:6379/1',
        "OPTIONS": {
           "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

也需要安装依赖包django-redis

代码语言:javascript
复制
pip install django-redis

然后在views.py中的方法加入这个装饰器就可以对页面进行缓存了。

代码语言:javascript
复制
@cache_page(60 * 10)
def index(request):
    ...

虽然使用很方便,但是这个cache_page生成的key 非常的长,而且不能自定义缓存的key,在使用上带来一些不便。

所以下面介绍如何 让@cache_page支持自定义的key,我们这里不会对django的源码修改。我们自己添加一个utils.py类。写一个类似的@cache_page即可。代码如下:

代码语言:javascript
复制
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

使用:

代码语言:javascript
复制
@cache_page(timeout=9999,cache_key='123')
def index(request):
   ...

如果默认不指定key,就使用url来作为key。非常方便

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档