gpt4 book ai didi

django - 如何为 Django 中的所有用户缓存 View

转载 作者:行者123 更新时间:2023-12-04 01:25:44 25 4
gpt4 key购买 nike

我正在尝试将 AWS ElastiCache 的 Memcached 实例与 Django 项目一起使用。它似乎为用户缓存了一个 View ,但是如果您在不同的 PC 上进入,它不会被缓存,直到从该 PC(或具有不同浏览器的同一台 PC)调用。

我不确定我做错了什么。

settings.py我有

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': os.environ.get('CACHE_LOCATION','127.0.0.1:11211'),
}
}

MIDDLEWARE = [
'core.middleware.DenyIndexMiddleware',
'core.middleware.XForwardedForMiddleware',
'core.middleware.PrimaryHostRedirectMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'masquerade.middleware.MasqueradeMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.sites.middleware.CurrentSiteMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware',
'cms.middleware.utils.ApphookReloadMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]

然后我使用 cache_page 缓存了 View
path('<str:service_type>/<str:location>/', cache_page(60*60)(views.canonical_search), name="canonical-search"),

如何缓存站点,以便无论用户如何都缓存页面?

编辑
我注意到它在使用用户登录时从不缓存。

最佳答案

当心 Vary标题,那个 cache_page()考虑到。

通常,一些中间件可能会添加 Vary标题,例如:

  • CsrfViewMiddleware添加 Cookie ,
  • GZipMiddleware添加 Accept-Encoding
  • LanguageCookieMiddleware可添加 Accept-Language

  • 这意味着只要您拥有不同的 Cookie( session )、编码或语言,您的页面就会拥有不同版本的缓存。

    至于你的情况, CsrfViewMiddleware可能是问题,可以添加装饰器 @csrf_exempt 以您的观点让 Vary: Cookie响应中未设置 header 。

    更多信息请访问 https://docs.djangoproject.com/en/3.0/topics/cache/#using-vary-headers

    关于django - 如何为 Django 中的所有用户缓存 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61953626/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com