gpt4 book ai didi

django - 在django中缓存查询结果

转载 作者:行者123 更新时间:2023-11-28 19:34:53 28 4
gpt4 key购买 nike

我正在尝试找到一种方法来缓存不会随频率变化的查询结果。例如,来自电子商务的产品类别(手机、电视等)。我正在考虑使用模板片段缓存,但在这个片段中,我将遍历这些类别的列表。该列表在站点的任何部分都可用,因此它在我的 base.html 文件中。呈现模板时是否必须始终发送类别列表?或者是否有更动态的方式来执行此操作,使列表始终在模板中可用?

最佳答案

将您的缓存查询弹出到 Django's cache :

from django.core.cache import cache

cache.set('key', queryset)

然后创建上下文处理器将缓存的值添加到所有模板中:

# myproject/myapp/context_processors.py

from django.core.cache import cache

def cached_queries():
return {'cache', cache.get('key')}

然后在你的 Django settings file 中添加你的上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS += (
'myproject.myapp.context_processors.cached_queries'
)

现在您将能够在所有通用模板和所有具有请求上下文的模板中访问 cache 变量,如果在 View 中完成此操作,则会给出模板:

return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))

何时设置缓存

这取决于缓存中包含的内容。然而,一个常见的问题是 Django 只有在发送页面请求时才真正执行 Python,而这通常不是您想要执行此类工作的地方。

另一种方法是创建一个 custom management command对于特定的应用程序。然后,您可以在必要时手动运行它,或者更常见的是将其设置为作为 cron job 运行。 .

要创建管理命令,您必须在位于应用程序内部的 management/commands 目录中创建一个从 Command 派生的类:

# myproject/myapp/management/commands/update_cache.py

from django.core.management.base import NoArgsCommand
from django.core.cache import cache

class Command(NoArgsCommand):
help = 'Refreshes my cache'

def handle_noargs(self, **options):
cache.set('key', queryset)

此文件的名称很重要,因为这将是命令的名称。在这种情况下,您现在可以在命令行上调用它:

python manage.py update_cache

关于django - 在django中缓存查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631865/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com