阅读(4649) (0)

Django4.0 缓存框架-站点缓存

2022-03-17 14:02:57 更新

一旦缓存设置完毕,使用缓存最简便的方式就是缓存整个站点。你需要在 ​MIDDLEWARE ​设置中添加 ​django.middleware.cache.UpdateCacheMiddleware​和 ​django.middleware.cache.FetchFromCacheMiddleware​,像下面这个例子一样:

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]

最后,在 Django 设置文件里添加下面的必需配置:

  • CACHE_MIDDLEWARE_ALIAS ​-- 用于存储的缓存别名。
  • CACHE_MIDDLEWARE_SECONDS ​-- 应缓存每个页面的秒数。
  • CACHE_MIDDLEWARE_KEY_PREFIX ​-- 如果使用相同的 ​Django installation ​,通过多站点进行缓存共享,请将此值设置为站点名,或者设置成在Django 实例中唯一的其他字符串,以此防止键冲突。如果你不介意,可以设置成空字符串。

在请求和响应标头允许的情况下,​FetchFromCacheMiddleware ​缓存状态为200的 ​GET ​和 ​HEAD ​响应。对于具有不同查询参数的相同URL的请求的响应被认为是单独的页面,并分别缓存。这个中间件期望一个​HEAD​请求的响应头与相应的GET请求具有相同的响应头;在这种情况下,它可以为​HEAD​请求返回一个缓存的​GET​响应。

此外,​UpdateCacheMiddleware ​在每个 ​HttpResponse ​里会自动设置一些 ​headers​,这会影响 下游缓存:

  • 设置 ​Expires header​ 为当前日期/时间加上定义的 ​CACHE_MIDDLEWARE_SECONDS
  • 设置 ​Cache-Control header​ 为缓存页面的最长时间,同样,在 ​CACHE_MIDDLEWARE_SECONDS​ 里设置

如果一个视图设置了它自己的缓存过期时间(比如在它的 ​Cache-Control header​ 里有 ​max-age​ 部分),然后页面将被缓存起来直到过期,而不是 ​CACHE_MIDDLEWARE_SECONDS ​。使用在 ​django.views.decorators.cache​ 的装饰器,你可以很轻松的设置视图的过期时间(使用 ​cache_control()​ 装饰器)或者禁用视图缓存(使用 ​never_cache()​ 装饰器)。
如果设置 ​USE_I18N ​为 ​True​,然后已生成的缓存键将包含动态 ​language ​的名称。这将允许你轻松缓存使用多语言的站点,而不用再创建缓存键。
当 ​USE_TZ ​被设置为 ​True ​时,缓存键也包括当前时区。