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

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/disable-cache-for-apphook-django-cms/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/disable-cache-for-apphook-django-cms/">https://vivazzi.pro/ru/it/disable-cache-for-apphook-django-cms/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц