middleware.py 868 B

12345678910111213141516171819202122232425262728293031
  1. from django.core.cache import cache
  2. from django.utils.functional import SimpleLazyObject
  3. from . import CACHE_NAME
  4. from .models import CacheVersion
  5. def cache_versions_middleware(get_response):
  6. """Sets request.cache_versions attribute with dict of cache versions."""
  7. def middleware(request):
  8. request.cache_versions = SimpleLazyObject(get_cache_versions)
  9. return get_response(request)
  10. return middleware
  11. def get_cache_versions():
  12. cache_versions = get_cache_versions_from_cache()
  13. if cache_versions is None:
  14. cache_versions = get_cache_versions_from_db()
  15. cache.set(CACHE_NAME, cache_versions)
  16. return cache_versions
  17. def get_cache_versions_from_cache():
  18. return cache.get(CACHE_NAME)
  19. def get_cache_versions_from_db():
  20. queryset = CacheVersion.objects.all()
  21. return {i.cache: i.version for i in queryset}