gpt4 book ai didi

python - 如何在 View 中使用Django缓存而不缓存所有页面

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:50 26 4
gpt4 key购买 nike

我尝试使用 Django Cache 来改善我的 View 。效果很好,400 毫秒到 8 毫秒是完美的。但是当用户第一次访问页面时,Django 会在标题中缓存包含用户信息的页面,当我尝试注销时,页面会继续包含用户信息。

我也尝试在模板中使用缓存,但效果不好,我的问题来自 View ,所以继续 400ms。

我的settings.py

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}

我的view.py

@cache_page(60 * 15)
def list(request, tag_slug=None):
page = request.GET.get('page')
data = questions_controller.list_questions(request, tag_slug, None, page)
if data:
return render(request, 'questions/list.html', data)
return page_not_found(request, "Page not found")

最佳答案

我遇到了同样的问题 per-view缓存。第一个缓存用户的用户信息向所有用户显示。我无法使用Template caching因为它很慢。

最好的方法是使用 low-level cache API 缓存 View 的最终结果。如果数据是动态的,则使用 django-signals清除陈旧的缓存数据。根据您的要求调整以下代码。

观看次数:

from django.core.cache import cache    
def sample(request):
cached_data = cache.get_many(['query1', 'query2'])
if cached_data:
return render(request, 'sample.html', {'query1': cached_data['query1'], 'query2': cached_data['query2']})
else:
queryset1 = Model.objects.all()
queryset2 = Model2.objects.all()
cache.set_many({'query1': queryset1 , 'query2': queryset2 }, None)
return render(request, 'sample.html', {'query1': queryset1 , 'query2': queryset2})

型号:

from django.db.models.signals import post_save
from django.core.cache import cache

@receiver(post_save, sender=Model1)
@receiver(post_save, sender=Model2)
def purge_cache(instance, **kwargs):
cache.delete_many(['query1', 'query2'])

希望这有帮助。

关于python - 如何在 View 中使用Django缓存而不缓存所有页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46241407/

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