Django4.0 缓存框架-站点缓存
一旦缓存设置完毕,使用缓存最简便的方式就是缓存整个站点。你需要在 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
时,缓存键也包括当前时区。