2024-04-25 08:55:27 发布
网友
我需要更新特定视图的缓存,这取决于现在几点。不仅仅是60分钟的缓存页面寿命,但它应该成为新的具体时间-当新的一小时开始。你知道吗
编辑:正如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不同的结果。你知道吗
time_func
这看起来并不是一个完美的方法,因为缓存页实际上被调用了很多次,所以最好再深入研究一下cache_page背后的代码。你知道吗
cache_page
编辑:正如teferi所解释的,这将不起作用,因为时间是在服务器启动时计算的。你知道吗
下面的代码将获取到下一个小时的分钟数,并将其缓存为分钟数。你知道吗
我想出了这样的办法:
因此,我们创建了一个decorator,其中参数(
time_func
作为第一个参数),并将视图包装在一系列包装器中,以便为包装函数的每次调用调用调用cache\u page decorator。因此,每次调用我们的视图时,都会得到与time_func不同的结果。你知道吗这看起来并不是一个完美的方法,因为缓存页实际上被调用了很多次,所以最好再深入研究一下
cache_page
背后的代码。你知道吗相关问题 更多 >
编程相关推荐