You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django视图缓存:如何设置缓存至月末到期?

Django 实现缓存至当月月末的视图装饰器

要实现把视图缓存到当月月末的装饰器,不能直接用Django自带的cache_page(它只支持固定超时秒数),得自定义一个装饰器来动态计算到月末的剩余时间,具体实现如下:

1. 导入依赖模块

先引入日期处理工具和Django原生缓存装饰器:

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

2. 自定义缓存装饰器

编写装饰器逻辑,先算出当前时间到当月月末的秒数差,再传递给cache_page:

def cache_page_expire_at_end_of_month(view_func):
    now = datetime.now()
    # 获取当月最后一天的日期(精确到23:59:59)
    last_day = calendar.monthrange(now.year, now.month)[1]
    last_day_of_month = datetime(now.year, now.month, last_day, 23, 59, 59)
    # 计算当前到月末的剩余秒数
    timeout = (last_day_of_month - now).total_seconds()
    # 调用原生缓存装饰器完成缓存逻辑
    return cache_page(timeout)(view_func)

3. 在视图中使用

直接用自定义装饰器装饰目标视图即可:

@cache_page_expire_at_end_of_month
def some_view(request):
    # 你的视图业务逻辑
    return HttpResponse("这是会被缓存到当月月末的内容")

注意事项

  • 装饰器会在视图第一次被访问时计算超时时间,跨月后只要视图被访问,就会自动重新计算当月月末的超时时间,无需重启服务。
  • 确保已在Django配置文件中正确配置CACHES(开发环境可使用LocMemCache,生产环境推荐Redis或Memcached)。

内容的提问来源于stack exchange,提问作者Andrej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:25:00