【发布时间】:2018-03-02 14:06:36
【问题描述】:
我在 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。
【问题讨论】:
-
我不确定,但如果您的 settings.py 文件中有
USE_I18N = True(Django 默认设置),这听起来很合理,缓存将取决于语言。如果您绝对不是为多语言网站提供服务,请将USE_I18N设置为 False,我假设 Django 从那时起将忽略 Accept-Language。 -
好像没什么区别。它仍然将语言存储在密钥中。但仍然是关闭它的好技巧。
-
令人惊讶。但很高兴知道。如果您还没有尝试过,也可以尝试将
USE_L10N切换为 False。
标签: python django python-3.x caching