如何为特定的@cache_page指定KEY_FUNCTION

时间:2013-12-02 13:12:35

标签: python django caching

我需要根据具体时间更新特定视图的缓存。不仅仅是60分钟的缓存页面,但它应该在新的时间开始的具体时间内成为新的。

2 个答案:

答案 0 :(得分:1)

我想出了类似的东西:

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

因此我们创建一个带参数(time_func作为第一个参数)的装饰器,并将我们的视图包装在一系列包装器中,以便每次调用包装函数时都会调用cache_page装饰器。因此,每次使用time_func的不同结果调用我们的视图时。

这看起来不是完美的方法,因为cache_page实际上被多次调用,所以最好再调查一下cache_page后面的代码。

答案 1 :(得分:0)

编辑:正如teferi所解释的那样,这将不起作用,因为在服务器启动时评估时间。

以下代码将获取分钟到下一个小时,将其缓存该分钟数。

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

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