Встречается на собеседованиях • сегодня
Можно ли с помощью BaseViews, к которому обращаемся через get, сохраняя данные в property, реализовать кэширование
Да, можно, но с осторожностью. BaseView в Django хранит состояние между запросами, так как инстансы переиспользуются. Это может привести к утечке данных или неожиданному поведению.
Пример с property-кэшем:
python
from django.views import View
class CachedView(View):
_cache = {} # Общий для всех инстансов
text
@property
def data(self):
if not hasattr(self, '_data'):
# Тяжелая операция
self._data = self._cache.get('key')
if self._data is None:
self._data = expensive_calculation()
self._cache['key'] = self._data
return self._data
def get(self, request):
return HttpResponse(self.data)text
Проблемы:
1. Общее состояние между запросами (если _cache на уровне класса)
2. Нет контроля времени жизни кэша
3. Нет инвалидации
Лучше использовать django.core.cache или специализированные библиотеки (redis, memcached). Для простых случаев подойдет @cached_property из django.utils.functional.
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы