我需要根据时间来更新特定 View 的缓存。不仅仅是缓存页面的 60 分钟生命周期,而且它应该在具体时间(新的一小时开始时)变成新的。
最佳答案
我想出了这样的东西:
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
作为第一个参数)并将我们的 View 包装在一系列包装器中,以便每次调用包装函数时都会调用 cache_page 装饰器。因此每次我们的 View 被调用时都会得到与 time_func 不同的结果。
这看起来并不是一个完美的方法,因为 cache_page 实际上被调用了很多次,所以最好多研究一下 cache_page
后面的代码。
关于python - 如何为特定的 @cache_page 指定 KEY_FUNCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329201/