Отключить кэширование страницы для приложения django-cms
27 апреля 2018 г. 13:55
При создании своего кастомного приложения (apphook
) в django-cms
или при отображении карточки товара в django-shop
может кэшироваться страница.
Я столкнулся с такой проблемой, когда мне нужно было после добавления товара в корзину отображать актуальные данные (увеличить счётчик товаров в корзине, вывести сообщение, что товар был добавлен в корзину и т. д.). Чтобы убрать кэш именно в этом месте, достаточно для классового представления (class-based view
) ProductRetrieveView.as_view()
, который отображает карточку товара, использовать never_cache
:
myshop/urls/products.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.conf.urls import url from django.views.decorators.cache import never_cache from shop.views.catalog import AddToCartView, ProductRetrieveView from shop.search.views import CMSPageCatalogWrapper from myshop.filters import ManufacturerFilter from myshop.serializers import CatalogSearchSerializer from django.db.models import Q from myshop.serializers.polymorphic import AddMyProductToCartSerializer urlpatterns = [ url(r'^$', CMSPageCatalogWrapper.as_view( search_serializer_class=CatalogSearchSerializer, filter_class=ManufacturerFilter, limit_choices_to=Q(active=True), )), url(r'^(?P<slug>[\w-]+)/?$', never_cache(ProductRetrieveView.as_view( limit_choices_to=Q(active=True), ))), url(r'^(?P<slug>[\w-]+)/add-my-product-to-cart', AddToCartView.as_view( serializer_class=AddMyProductToCartSerializer, )), ]
Собственно, отображение карточки товара это то же представление, которое может кэшироваться. Это представление вшито в само django-shop
, но вышеприведённый urls.py
- наш кастомный, поэтому именно на этом уровне мы и уберём кэширование карточки товара.
P. S. Если вы знаете лучше способ отключения кэша именно для карточки товара, то, пожалуйста, поделитесь в комментариях.
Такая же логика отключения и для простого вашего кастомного приложения на django-cms
. Здесь уже можно отключить кэш на разном уровне: в urls.py
или в views.py
, используя декоратор never_cache
.
Подробнее о кэшировании в Django: https://docs.djangoproject.com/en/dev/topics/cache/
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0