繁体   English   中英

Django:接受语言请求HTTP标头上的缓存有所不同

[英]Django: Caching differs on Accept-Language request HTTP header

我正在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。

Django当前的行为是:

  • USE_I18N == TrueUSE_L10N == True :用户区域设置被附加到缓存键。 注意:这不是原始的Accept-Language标头值,而是Django从中派生的语言环境!
  • 在所有其他情况下( USE_I18NUSE_L10N都是虚假的),原始用户Accept-Language标头值将附加到高速缓存键。

这意味着当前不可能为所有语言环境全局缓存内容。

对于您的用例,启用I18NL10N可能是最可行的选择,因为它会通过仅在每个语言环境而不是每个Accept-Language标头值(可能因语言而异!)中生成一个缓存键来稍微减少缓存键的数量。

查看此相关票证#18191代码更改 ,这些更改自Django 1.6以来几乎保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM