我需要根据具体时间更新特定视图的缓存。不仅仅是60分钟的缓存页面,但它应该在新的时间开始的具体时间内成为新的。
答案 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