栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使Django中的视图缓存过期?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使Django中的视图缓存过期?

此解决方案适用于1.7之前的Django版本

这是我写的一种解决方案,用于执行你在自己的一些项目中正在谈论的事情:

def expire_view_cache(view_name, args=[], namespace=None, key_prefix=None):    """    This function allows you to invalidate any view-level cache.         view_name: view function you wish to invalidate or it's named url pattern        args: any arguments passed to the view function        namepace: optioal, if an application namespace is needed        key prefix: for the @cache_page decorator for the function (if any)    """    from django.core.urlresolvers import reverse    from django.http import HttpRequest    from django.utils.cache import get_cache_key    from django.core.cache import cache    # create a fake request object    request = HttpRequest()    # Loookup the request path:    if namespace:        view_name = namespace + ":" + view_name    request.path = reverse(view_name, args=args)    # get cache key, expire if the cached item exists:    key = get_cache_key(request, key_prefix=key_prefix)    if key:        if cache.get(key): # Delete the cache entry.   # # Note that there is a possible race condition here, as another  # process / thread may have refreshed the cache between # the call to cache.get() above, and the cache.set(key, None)  # below.  This may lead to unexpected performance problems under  # severe load. cache.set(key, None, 0)        return True    return False

Django会为视图请求的这些缓存设置密钥,因此该操作是为缓存的视图创建一个伪造的请求对象,并使用该对象来获取缓存密钥,然后使其过期。

要以你正在谈论的方式使用它,请尝试以下操作:

from django.db.models.signals import post_savefrom blog.models import Entrydef invalidate_blog_index(sender, **kwargs):    expire_view_cache("blog")post_save.connect(invalidate_portfolio_index, sender=Entry)

因此,基本上,只要保存了Blog Entry对象,就会调用invalidate_blog_index,并且缓存的视图也会过期。注意:尚未对此进行广泛测试,但到目前为止对我来说还不错。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395127.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号