我不知道控制缓存键的任何选项,并且 Django 中的实现不建议有任何选项。通过缓存中间件为请求生成缓存键的代码位于django.utils.cache.get_cache_key
(知道从缓存中获取的位置)和learn_cache_key
(知道在哪里设置缓存)。您可以对这些函数进行猴子修补,以不考虑标头,如下所示:
from django.utils import cache
from django.conf import settings
def get_path_cache_key(request, key_prefix=None):
if key_prefix is None:
key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
return cache._generate_cache_key(request, [], key_prefix)
# passing an empty headerlist so only request.path is taken into account
cache.get_cache_key = get_path_cache_key
cache.learn_cache_key = get_path_cache_key
这将在内部采用路径的 MD5 散列,添加潜在的前缀,并考虑当前的语言环境(语言)。您可以进一步更改它以省略前缀和语言。根据文档,我不建议使用没有散列的普通路径,因为 memcached 不允许超过 250 个字符或包含空格的键。这应该不是问题,因为您也可以应用get_path_cache_key
到 URLget_absolute_url()
并清除该页面。