Встречается на собеседованиях • сегодня

Можно ли с помощью 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.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы