Django CMS per-site 缓存不适用于 CMS 页面

Django CMS per-site cache not working for CMS pages

我正在尝试使用 Django CMS 设置 Django 的 per-site 缓存 (https://docs.djangoproject.com/en/1.10/topics/cache/#the-per-site-cache),但我无法让缓存用于 CMS 页面,但它适用于 apphooked 页面。

这是我的设置片段:

MIDDLEWARE_CLASSES = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.gzip.GZipMiddleware',
    'htmlmin.middleware.HtmlMinifyMiddleware',
    'htmlmin.middleware.MarkRequestMiddleware',
    'cms.middleware.utils.ApphookReloadMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
    'cms.middleware.user.CurrentUserMiddleware',
    'cms.middleware.page.CurrentPageMiddleware',
    'cms.middleware.toolbar.ToolbarMiddleware',
    'cms.middleware.language.LanguageCookieMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]

CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 60
CACHE_MIDDLEWARE_KEY_PREFIX = 'mysite-'
CMS_PAGE_CACHE = True

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'cache_table',
        'TIMEOUT' : 60*60*24,
        'OPTIONS': {
            'MAX_ENTRIES': 10000,
        }
    }
}

如果我导航到应用挂钩的页面,响应 header 是:

Cache-Control: max-age=60

这是正确的。但是,对于 CMS 页面,我得到 header:

Cache-Control: max-age=0, no-store, no-cache, must-revalidate

这是不正确的。

Django CMS 文档 (http://docs.django-cms.org/en/release-3.4.x/how_to/caching.html) 说 UpdateCacheMiddleware 应该首先是 FetchFromCacheMiddleware 最后,这就是我所做的,但没有运气。

我已经重新启动了服务器,尝试更新页面上的内容 re-publishing 但仍然没有成功。

我在这里错过了什么?!

如有任何帮助,我们将不胜感激。

经过几个小时的痛苦和折磨,我终于设法弄清楚了这里的问题。问题是因为我有一些我设置为不缓存的自定义插件,例如:

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool

class MyPlugin(CMSPluginBase):
    name = 'My plugin'
    cache = False
    ...

plugin_pool.register_plugin(MyPlugin)

在插件设置为不缓存的页面上,cache-control header 显示为:

Cache-Control: max-age=0, no-store, no-cache, must-revalidate

我认为是正确的。如果您从该页面删除插件,您将获得预期的 header:

Cache-Control: max-age=60

希望有一天这对其他人有所帮助。