Python Django:缓存在接受语言请求HTTP头上不同
我正在Django项目中缓存一些API函数。我的代码基本上如下所示:Python Django:缓存在接受语言请求HTTP头上不同,python,django,python-3.x,caching,Python,Django,Python 3.x,Caching,我正在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
@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 request HTTP头似乎是缓存键的一部分。以下是一个例子:
:1:views.decorators.cache.cache_page..GET.3181615aba0959bd5afd815d19aedc92.d41d8cd98f00b204e9800998ecf8427e.en.欧洲/柏林
我假设这意味着这个缓存对象将只用于具有相同Accept Language request HTTP头的用户?我的网站几乎没有访问者,并且为所有访问者提供相同的内容,因此我不希望缓存依赖于访问者的位置和语言。有没有办法改变这一点
我正在使用Django 1.11和Python 3.6。Django当前的行为是:
或USE\u I18N==True
:用户区域设置附加到缓存键。 注意:这不是原始的USE\u L10N==True
header值,而是Django从中派生的区域设置李>Accept Language
- 在所有其他情况下(
和USE_I18N
是错误的),原始用户USE_L10N
头值被附加到缓存键接受语言
I18N
或L10N
可能是最可行的选择,因为它将通过仅为每个区域设置生成一个缓存键而不是每个Accept Language
头值(每个语言可能不同!)略微减少缓存键计数
请查看自Django 1.6以来基本保持不变的文件。我不确定,但如果您在settings.py文件(Django默认文件)中使用
并使用_I18N=True
,则缓存将取决于语言,这听起来很合理。如果你肯定不是在为多语言网站服务,请将USE\u I18N
设置为False,我假设Django从此将忽略Accept语言。这似乎没有什么区别。它仍然将语言存储在键中。但还是有一个很好的关闭提示。令人惊讶。但很高兴知道。如果您还没有尝试过,也可以尝试将USE\u L10N
切换为False。