#django #caching #save
#django #кэширование #Сохранить
Вопрос:
Надеюсь, кто-нибудь знает простой способ сделать это.
Возможно ли запускать функцию cache.clear() при каждом сохранении в любой модели?
Я знаю, что документы Django показывают вам, как реализовать для каждой модели, и накладные расходы не являются проблемой. Я хотел бы очищать кэш каждый раз, когда вносятся изменения.
Ответ №1:
Есть несколько способов, которыми вы могли бы это сделать.
Во-первых, вы могли бы создать общий абстрактный базовый класс, который наследуется от моделей.Модель и переопределения save
чтобы очистить кэш, сделайте так, чтобы все ваши модели наследовали от этого.
Другим способом может быть использование сигналов — сигналы сохранения до и после имеют sender
необязательный аргумент, если вы не укажете конкретную модель, он сработает для всех моделей.
Комментарии:
1.
from django.db.models.signals import post_save from django.core.cache import cache @receiver(post_save) def clear_the_cache(**kwargs): cache.clear()
2. Я думаю, что cache.clear () очистит весь кэш вместо соответствующего кеша для конкретной модели, и из-за этого мой другой полезный кеш также будет очищен. Есть ли какое-либо решение для этого? и я также проверил документ по управлению версиями кэша. но я не понимаю, как я могу узнать ключи кэша, если я кэшировал конкретное представление.
Ответ №2:
@Daniel Rosemen. Извините, поскольку у меня небольшая репутация, я не смог удалить свой комментарий.
Спасибо, что указали мне правильное направление.
Это было так просто, как:
from django.db.models.signals import post_save
from django.core.cache import cache
@receiver(post_save)
def clear_the_cache(**kwargs):
cache.clear()
Комментарии:
1. Привет, Энди, я подумываю о применении этого к сайту django oscar. Мне интересно, как это сработало для вас? Есть ли какие-либо негативные последствия, о которых вы могли подумать?