如何为特定的 @cache_pag 指定 KEY_FUNCTION

2024-04-25 08:55:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要更新特定视图的缓存,这取决于现在几点。不仅仅是60分钟的缓存页面寿命,但它应该成为新的具体时间-当新的一小时开始。你知道吗


Tags: 视图时间页面小时寿命
2条回答

编辑:正如teferi所解释的,这将不起作用,因为时间是在服务器启动时计算的。你知道吗

下面的代码将获取到下一个小时的分钟数,并将其缓存为分钟数。你知道吗

import datetime
from django.views.decorators.cache import cache_page

@cache_page(60-datetime.datetime.now().minute)
def your_view(request):
    pass

我想出了这样的办法:

import datetime
from django.views.decorators.cache import cache_page


def my_cache(time_func, *args, **kwargs):
    def decorator(func):
        def wraps(*args, **kwargs):
            @cache_page(time_func())
            def inner_func(*args, **kwargs):
                return func(*args, **kwargs)    
            return inner_func(*args, **kwargs)
        return wraps
    return decorator


def till_hour():
    now = datetime.datetime.now()
    return (60 - now.minute) * 60 + (60 - now.second)


@my_cache(time_func=till_hour)
def my_view(request):
    ... # view code_here

因此,我们创建了一个decorator,其中参数(time_func作为第一个参数),并将视图包装在一系列包装器中,以便为包装函数的每次调用调用调用cache\u page decorator。因此,每次调用我们的视图时,都会得到与time_func不同的结果。你知道吗

这看起来并不是一个完美的方法,因为缓存页实际上被调用了很多次,所以最好再深入研究一下cache_page背后的代码。你知道吗

相关问题 更多 >