Кэш-представление django с параметрами URL

Недавно я реализовал превосходную систему кэша Django. Однако из того, что я понимаю, Django не кэширует представление, которое передается параметрам в запросе get. У меня есть представление Ajax, которое передается с параметрами, которые я хотел бы кэшировать в течение X секунд, что было бы простым способом сделать это?

В коде psuedo у меня есть URL-адрес:

http://mysites/ajaxthing/?user=foo&items=10 

Я хотел бы кэшировать любой этот URL-адрес, если он имеет одинаковые параметры get.

В настоящее время я использую декораторы кеша:

 myview(stuff) myview = cache_page(myview, 60 * 3) 

Я читал о разных заголовках джанго, но это немного пошло мне на голову, и я даже не уверен, что это правильное решение

5 Solutions collect form web for “Кэш-представление django с параметрами URL”

Правильно, разбить заголовки – не правильное решение, оно используется, когда вы хотите кэшировать на основе заголовков запросов клиентов, таких как пользовательский агент и т. Д.

Вам нужно использовать низкоуровневое кэширование API или фрагментов шаблонов . Это зависит от ваших взглядов.

При использовании низкоуровневого API это выглядит примерно так:

 from django.core.cache import cache def get_user(request): user_id = request.GET.get("user_id") user = cache.get("user_id_%s"%user_id) if user is None: user = User.objects.get(pk=user_id) cache.set("user_id_%s"%user_id, user, 10*60) # 10 minutes ... .. . 

Да, вы можете использовать django-view-cache-utils, вот код для вашего случая:

 from view_cache_utils import cache_page_with_prefix from django.utils.hashcompat import md5_constructor ... @cache_page_with_prefix(60*15, lambda request: md5_constructor(request.get_full_path()).hexdigest()) def my_view(request): ... 

Это уже не проблема в Django 1.3+. См .: http://docs.djangoproject.com/en/1.3/topics/cache/#using-vary-headers

Похоже, вам больше не нужно делать ничего сложнее, чем размещать @cache_page ([длительность времени]) над вашей функцией просмотра, которую вы пытаетесь кэшировать, независимо от того, есть ли у вас параметры в URL-адресе.

Например, если у вас есть URL-адрес:

 http://example.com/user/some_user_id 

Функция просмотра в views.py будет выглядеть примерно так:

 from django.views.decorators.cache import cache_page ... @cache_page(60 * 10) def get_user_detail(request, user_id=None): ... return render(...) 

немного поздно, но для этого вы можете использовать django-view-cache-utils .

  • Лучшее место для очистки кеша при перезапуске сервера django
  • Как я могу получить время истечения срока для конкретного элемента в memcached
  • Как установить тайм-аут получения Memcached в Django
  • Постоянный многопроцессорный общий кэш в Python с stdlib или минимальными зависимостями
  • Ошибка при установке pylibmc using pip
  • Удаление определенных элементов из кеша Django?
  • Поддерживать большой словарь в памяти для Django-Python?
  • django_pylibmc жалуется на Django 1.7 и python 3.4
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.