Отключить кэширование страницы для приложения 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