我在Django项目中缓存了一些API函数。我的代码基本上是这样的:
@cache_control(max_age=1200)
@cache_page(60 * 60 * 24)
def data_as_json(request, argument_1, argument_2):
#code
return JsonResponse(rst)
并在settings.py中:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'cache_table',
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
我注意到当我在缓存表中查看访问者的Accept-Language请求HTTP标头似乎是缓存键的一部分时。这是一个例子:
:1:views.decorators.cache.cache_page..GET.3181615aba0959bd5afd815d19aedc92.d41d8cd98f00b204e9800998ecf8427e.en.Europe/Berlin
我假设这意味着此缓存对象仅用于具有相同Accept-Language请求HTTP标头的用户?我的网站访问者很少,并为所有访问者提供相同的内容,因此我不希望缓存取决于访问者的位置和语言。有没有办法改变这个?
我正在使用Django 1.11和Python 3.6。
答案 0 :(得分:1)
Django目前的行为是:
USE_I18N == True
或USE_L10N == True
:用户区域设置附加到缓存键。
注意:这不是原始Accept-Language
标头值,它是Django从中获取的区域设置!USE_I18N
和USE_L10N
都是假的),原始用户Accept-Language
标头值会附加到缓存密钥。这意味着它目前无法为所有语言环境全局缓存内容。
对于您的用例,它可能是启用I18N
或L10N
的最可行选项,因为它会通过仅为每个区域设置生成一个缓存密钥而不是每个缓存密钥数量来减少缓存密钥数量Accept-Language
标头值(每种语言可能会有所不同!)。
查看自Django 1.6以来大致保持不变的this relevant ticket #18191和the code changes。