Теперь перейдём непосредственно к практическому кэшированию в проекте.
Для начала отредактируйте файл views.py приложения books, добавив следующую ниже инструкцию импорта:
from django.core.cache import cache
А затем отредактируйте представление book_list, как показано ниже:
@require_http_methods(['GET'])
def book_list(request):
book_list = cache.get('cached_book_list')
if not book_list:
book_list = Book.objects.all()
cache.set('cached_book_list', book_list)
form = BookCreateForm(auto_id=False)
return render(request, 'base.html', {'book_list': book_list, 'form': form})
В приведенном выше исходном коде делается попытка получить ключ cached_book_list из кэша с помощью метода cache.get(). Этот метод возвращает None, если данный ключ не найден.
Если ключ не найден (еще не кэширован или кэширован, но истек тайм-аут), то выполняется запрос, чтобы извлечь все объекты book_list, и результат кэшируется с помощью метода cache.set().
Проверка запросов к кэшу с помощью Django Debug Toolbar
Давайте добавим меню отладочных инструментов Django Debug Toolbar в проект, чтобы проверять запросы к кэшу.
Сначала следующей ниже командой установите меню отладочных инструментов Django Debug Toolbar:
pip install django-debug-toolbar
Отредактируйте файл settings.py проекта, добавив debug_toolbar в настроечный параметр INSTALLED_APPS, как показано ниже:
INSTALLED_APPS = [
# ...
'debug_toolbar',
]
В том же файле добавьте в настроечный параметр MIDDLEWARE следующую ниже строку:
MIDDLEWARE = [
'debug_toolbar.middleware.DebugToolbarMiddleware',
# ...
]
Напомним, что промежуточный компонент DebugToolbarMiddleware необходимо размещать перед любым другим промежуточным компонентом, за исключением промежуточного компонента, кодирующего содержимое ответа, например GZipMiddleware, который, если он присутствует, должен стоять первым.
В конец файла settings.py добавьте такие строки:
INTERNAL_IPS = [
'127.0.0.1',
]
Меню отладочных инструментов Django будет отображаться только в том случае, если ваш IP-адрес соответствует записи в настроечном параметре INTERNAL_IPS.
Отредактируйте главный файл urls.py проекта, добавив следующий ниже шаблон URL-адреса в urlpatterns:
urlpatterns = i18n_patterns(
# ...
path('__debug__/', include('debug_toolbar.urls')),
)
Запустите сервер разработки и пройдите по URL-адресу http://127.0.0.1:8000/ в своем браузере.
Теперь вы должны увидеть меню отладочных инструментов Django в правой части страницы:
Кликните по кнопке Кэш в боковом меню. Вы увидите следующую ниже панель:
На ней видны две команды обращения к кэшу: get и set.
Теперь кликните по кнопке SQL в боковом меню:
Видим один SQL-запрос к базе данных.
Обновим страницу :
Теперь видим только одну команду get и отсутствие SQL-запроса к базе данных, страница использует только кэшированные данные.