python - 如何为特定的 @cache_page 指定 KEY_FUNCTION

标签 python django caching

我需要根据时间来更新特定 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/

相关文章:

python - 在使用 Python 进行流式传输之前增加音量

python - 在 Tensorflow 上对两层训练的神经模型进行预测

python - 如何将变量添加到我从中导入的模块?

python - 我如何用 django admin 中的复选框替换 charfield

.net - Resx 文件的奇怪 IIS 缓存行为

caching - 缓存与分页

python - SQL 链接到 Access 数据库错误

django 数据库重新连接不同的用户

python - 如何在 Django 表单中显示特定数据?

c# - 当某些内容缓存在 c# asp.net 中时,它是缓存在服务器上还是客户端上?