Я хотел бы реализовать декоратор, который обеспечивает кэширование для каждого метода, а не только представления. Вот пример использования.
У меня есть собственный тег, который определяет, если запись в длинном списке записей "любимый". Чтобы проверить, элемент является фаворитом, вам нужно запросить базы данных. В идеале вы бы выполните один запрос, чтобы получить все, а затем просто проверьте, что кешированный список против каждой записи.
Одним из решений является получение всех фаворитам в представлении, а затем передать которые устанавливаются в шаблон, а затем в каждый вызов тега.
В качестве альтернативы сам тег мог выполнить сам запрос, но только первый раз он назвал. Затем результаты могут быть кэшированы для последующих звонки. Положительным моментом является то, что вы можете использовать этот тег из любого шаблона, на любом просмотра, без предупреждения о представлении.
В существующем кэширующем механизме вы может просто кэшировать результат за 50 мс, и предположим, что это будет коррелировать с текущий запрос. Я хочу сделать это достоверность корреляции.
Вот пример тега, который у меня есть.
@register.filter()
def is_favorite(record, request):
if "get_favorites" in request.POST:
favorites = request.POST["get_favorites"]
else:
favorites = get_favorites(request.user)
post = request.POST.copy()
post["get_favorites"] = favorites
request.POST = post
return record in favorites
Есть ли способ получить текущий объект запроса из Django, не передавая его? Из тега я мог просто передать запрос, который всегда будет существовать. Но я хотел бы использовать этот декоратор из других функций.
Существует ли существующая реализация кэша для каждого запроса?