我遇到了同样的问题per-view https://docs.djangoproject.com/en/1.11/topics/cache/#the-per-view-cache缓存。第一个缓存用户的用户信息向所有用户显示。而且我不能使用模板缓存 https://docs.djangoproject.com/en/1.11/topics/cache/#template-fragment-caching因为它很慢。
最好的方法是使用缓存视图的最终结果低级缓存API https://docs.djangoproject.com/en/1.11/topics/cache/#the-low-level-cache-api。如果数据是动态的,则使用Django 信号 https://docs.djangoproject.com/en/1.11/topics/signals/#module-django.dispatch清除陈旧的缓存数据。根据您的要求调整以下代码。
Views:
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})
Models:
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'])
希望这可以帮助。