Закрыть

Для эффективной работы на сайте используются cookie и обработка персональных данных. Пользуясь этим сайтом, вы соглашаетесь с правилами использования сайта. Подробнее

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

Вы счастливы или несчастны не благодаря тому, что вы имеете, и не в связи с тем, кем являетесь, где находитесь или что делаете; ваше состояние определяется тем, что вы обо всем этом думаете.

Дейл Карнеги

Отключить кэширование страницы для приложения django-cms

27 апреля 2018 г. 9: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 оценок)

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

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

Автор статьи

Права на использование данной статьи, расположенной на настоящей странице http://vivazzi.ru/it/disable-cache-for-apphook-django-cms/:

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

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

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

Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

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

Вы можете оставить комментарий как незарегистрированный пользователь. Но, зарегистрировавшись, вы сможете получать оповещения об ответах, а также иметь доступ к своему личному аккаунту для просмотра своих комментариев.

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

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

Попробуйте