Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:缓存在接受语言请求HTTP头上不同_Python_Django_Python 3.x_Caching - Fatal编程技术网

Python Django:缓存在接受语言请求HTTP头上不同

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

我正在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 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
    :用户区域设置附加到缓存键。 注意:这不是原始的
    Accept Language
    header值,而是Django从中派生的区域设置
  • 在所有其他情况下(
    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。