Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

10.3 Уровни кэша в Django
7 из 16 шагов пройдено
0 из 27 баллов  получено

Теперь перейдём непосредственно к практическому кэшированию в проекте.

Для начала отредактируйте файл 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-запроса к базе данных, страница использует только кэшированные данные.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.