Содержание

Хранение корзины покупок в сессиях · Django в примерах

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

  • id экземпляра Product
  • Количество товара, выбранное для данного продукта
  • Цена единицы для данного продукта

Поскольку цены на продукцию могут различаться, мы приближаемся к сохранению цены продукта вместе с продуктом, когда он добавляется в корзину. Таким образом, мы будем сохранять ту же цену, которую пользователи увидели при добавлении товара в корзину, даже если цена продукта изменится после этого.

Теперь необходимо управлять созданием корзин и связывать их с сеансами. Корзина покупок должна работать следующим образом:

  • Когда требуется корзина, мы проверяем, установлен ли пользовательский session key. Если в сессии не задана корзина, мы создадим новую корзину и сохраним ее в session key корзины.
  • Для последовательных запросов мы выполняем одну и ту же проверку и получая номенклатуры корзины из session key корзины. Мы извлекаем элементы корзины из базы данных и связанные с ними объекты продукта.

Измените файл settings.py проекта и добавьте в него следующий параметр:

CART_SESSION_ID = 'cart'

Это ключ, который мы собираемся использовать для хранения корзины в сессии пользователя.

Давайте создадим приложение для управления корзинами покупок. Откройте терминал и создайте новое приложение, запустив следующую команду из каталога проекта:

python manage.py startapp cart

Затем отредактируйте файл

settings.py проекта и добавьте «cart» к параметру INSTALLED_APPS следующим образом:

INSTALLED_APPS = (
    # ...
    'shop',
    'cart',
)

Создайте новый файл в каталоге приложения cart и назовите его cart.py. Добавьте в него следующий код:

from decimal import Decimal
from django. conf import settings
from shop.models import Product
class Cart(object):
    def __init__(self, request):
        """
        Инициализируем корзину
        """
        self.session = request.session
        cart = self.session.get(settings.CART_SESSION_ID)
        if not cart:
            # save an empty cart in the session
            cart = self.session[settings.CART_SESSION_ID] = {}
        self.cart = cart

Это класс Cart, который позволит нам управлять корзиной для покупок. Требуется инициализация корзины с помощью объекта request. Мы храним текущую сессию с помощью self.session = request.session, чтобы сделать его доступным для других методов класса Cart. Во-первых, мы пытаемся получить корзину с текущей сессии с помощью self.session.get(settings.CART_SESSION_ID). Если в сессии отсутствует корзина, то мы создадим сессию с пустой корзиной, установив пустой словарь в сессии. Мы ожидаем, что наш словарь корзины будет использовать коды продуктов в качестве ключей и словарь с количеством и ценой в качестве значения для каждого ключа.

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

Создадим метод для добавления продуктов в корзину или обновления их количества. Добавьте следующие методы add() и save() в класс Cart:

def add(self, product, quantity=1, update_quantity=False):
    """
    Добавить продукт в корзину или обновить его количество.
    """
    product_id = str(product.id)
    if product_id not in self.cart:
        self.cart[product_id] = {'quantity': 0,
                                 'price': str(product.price)}
    if update_quantity:
        self.cart[product_id]['quantity'] = quantity
    else:
        self.cart[product_id]['quantity'] += quantity
    self.save()
def save(self):
    # Обновление сессии cart
    self.session[settings.CART_SESSION_ID] = self.cart
    # Отметить сеанс как "измененный", чтобы убедиться, что он сохранен
    self.
session.modified = True

Метод add() принимает следующие параметры:

  • product : Экземпляр Product для добавления или обновления в корзине
  • quantity : Необязательное целое число для количества продукта. По умолчанию используется значение 1 .
  • update_quantity : Это логическое значение, которое указывает, требуется ли обновление количества с заданным количеством (True), или же новое количество должно быть добавлено к существующему количеству (False).

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

id продукта — это ключ, а значение, которое мы сохраняем, — словарь с количеством и ценой для продукта. Цена продукта преобразуется из десятичного разделителя в строку, чтобы сериализовать его. Наконец, мы вызываем метод save(), чтобы сохранить корзину в сессии.

Метод save() сохраняет все изменения в корзине в сессии и помечает сессию как modified с помощью session.modified = True. Это говорит о том, что сессия modified и должна быть сохранена.

Нам также нужен метод для удаления продуктов из корзины. Добавьте следующий метод в класс Cart:

def remove(self, product):
    """
    Удаление товара из корзины.
    """
    product_id = str(product.id)
    if product_id in self.cart:
        del self.cart[product_id]
        self.save()

Метод remove() удаляет заданный продукт из словаря корзины и вызывает метод save() для обновления корзины в сессии.

Нам придется перебрать элементы, содержащихся в корзине, и получить доступ к соответствующим экземплярам Product. Для этого в классе можно определить метод __iter__()

. Добавьте следующий метод в класс Cart:

def __iter__(self):
    """
    Перебор элементов в корзине и получение продуктов из базы данных. 
    """
    product_ids = self.cart.keys()
    # получение объектов product и добавление их в корзину
    products = Product.objects.filter(id__in=product_ids)
    for product in products:
        self.cart[str(product.id)]['product'] = product
    for item in self.cart.values():
        item['price'] = Decimal(item['price'])
        item['total_price'] = item['price'] * item['quantity']
        yield item

В методе __iter__()

мы извлекаем экземпляры продукта, присутствующие в корзине, чтобы включить их в номенклатуры корзины. Наконец, мы проходим по элементам корзины, преобразуя цену номенклатуры обратно в десятичное число и добавляя атрибут total_price к каждому элементу. Теперь можно легко выполнить итерацию по товарам в корзине.

Нам также нужен способ вернуть общее количество товаров в корзине. Когда функция len() выполняется на объекте, Python вызывает метод __len__() для извлечения ее длины. Мы собираемся определить пользовательский метод __len__(), чтобы вернуть общее количество элементов, хранящихся в корзине.

Добавьте следующий метод __len__() в класс Cart:

def __len__(self):
    """
    Подсчет всех товаров в корзине.
    """
    return sum(item['quantity'] for item in self.cart.values())

Мы возвращаем сумму количества всех товаров.

Добавьте следующий метод для расчета общей стоимости товаров в корзине:

def get_total_price(self):
    """
    Подсчет стоимости товаров в корзине.
    """
    return sum(Decimal(item['price']) * item['quantity'] for item in
               self.cart.values())

И, наконец, добавьте метод для очистки сеанса корзины:

def clear(self):
    # удаление корзины из сессии
    del self.session[settings.CART_SESSION_ID]
    self.session.modified = True

Теперь наш класс Cart готов к управлению корзиной для покупок.

Нужна ли корзина покупок на сайте для посетителей?

Если вы что-то продаете на своем сайте (предлагаете коммерческие услуги), то вне зависимости от объемов торговых предложений ваш сайт уже является магазином. А теперь представьте, что вы пришли в обычный магазин (супермаркет) и не обнаружили в нем корзин (тележек) для товара. Будет ли Вам удобно покупать в таком магазине? Вернетесь ли в него в следующий раз? Скорее всего нет… Так и в интернет-магазине, удобство покупки играет не самую последнюю роль в успехе всего бизнеса.

Уже на данном этапе можно сделать определенные выводы о том, что если есть возможность с помощью установки корзины для покупок сделать более удобным процесс покупки товара — это нужно делать! Но рассмотрим более детально — чем же это удобнее:

Добавить товар в корзину — это еще не означает купить. Больше половины случаев добавления товара в корзину покупок в интернете заканчивается без окончательного оформления заказа. Однако сам факт такого намерения, а также постоянное напоминание (на каждой странице) о том, что товар выбран — всё больше и больше убеждает потенциального покупателя о покупке. Возвращаясь к покупке в обычном супермаркете — у какого товара больше шансов быть приобретенным: у того который вы видели на полке и подумали об его покупке или у того, который вы положили к себе в корзину и носите?

Могут возразить владельцы сайтов, которые продают 2-3 товара или столько же услуг, или у которых услуги/товары не подразумевают совместное приобретение, например, сайт с юридическими услугами, который предлагает множество направлений, но пользователю в определенный момент времени часто требуется только одна, конкретная услуга. Зачем её добавлять в корзину продуктов или в “отмеченные услуги”? — Да хоть для того, чтобы посетитель вашего сайта уйдя на другие страницы, чтобы более детально ознакомится с надежностью вашей компании, почитать про отзывы, способы оплаты или условия доставки товара смог вспомнить про выбранную услугу и ему не требовалось бы возврата в то место магазина, где он этот товар или услугу видел.

Крайний случай для возражения — одностраничный сайт с одним (несколькими товарами). Не забыть и не заблудиться — всё на виду. Нужна здесь или нет корзина для покупок? Нужна! Нужна потому, что попав на такой сайт мы не даем посетителю сразу информацию о том, что на сайте только 1 страница и куда не ткни — все равно на ней останешься, и что больше чем здесь у нас информации для него нет. Покупатели в интернете давно привыкли к определенной модели поведения и не задумываясь будут искать привычную кнопку “в корзину” вне зависимости от объемов вашего сайта. Не найдут — могут уйти.

Но это только часть плюсов в наличии корзины на сайте, рассмотренных со стороны удобства самих посетителей. Причем часть далеко не полная. Взять к примеру удобство от подсчета суммы добавленных в корзину товаров, возможность управления их количеством, возможность возврата к заполненной корзине спустя некоторое время (дни). Есть еще другая сторона — не только посетителям сайта нужна корзина, но и администраторам сайта, а также поисковыми система.

Корзины и тележки для покупок: Сделано в США

Good L Corp изготавливает исключительные корзины для покупок из прочных материалов, чтобы максимизировать результаты розничной торговли. В Good L. Corp мы понимаем, что наши вместительные и удобные корзины для покупок не только повышают комфорт и эффективность покупателей (не волнуйтесь, они делают и это). Наши легкие и прочные багажники стратегически разработаны для поддержки как запланированных, так и незапланированных покупок, что напрямую влияет на ваши доходы и размер прибыли.

Увеличьте свои импульсивные продажи

Изготовлено из 100% переработанных материалов

Сделано в США

Щелкните здесь для удобного онлайн-заказа
в нашем полном наборе корзин для покупок
и тележек.

Посмотреть каталог продукции

Good L Corp предлагает конкурентоспособные цены и скидки на оптовые закупки. Свяжитесь с нами сейчас, чтобы узнать цену продажи без риска.

Запросить бесплатное предложение

Качественные материалы

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

Переработанный пластик

Мы производим наши большие, высокие, большие, стандартные и мини-корзины, используя 100% переработанный пластик, что обеспечивает непревзойденную долговечность продукта и заботу об окружающей среде.

Высококачественная сталь

Никаких скрипучих колес! Good L Corp использует высококачественную сталь для каждой тележки, чтобы свести к минимуму ржавчину и обеспечить максимальную производительность в любое время.

Изготовлен из переработанных материалов.

Мы заботимся об окружающей среде. Мы работаем на экологичном оборудовании и по возможности используем переработанные материалы.

Сделано в США

Ваши розничные тележки и корзины стимулируют продажи… или отталкивают покупателей?

В Good L Corp мы разрабатываем каждый продукт таким образом, чтобы максимально удовлетворить потребности клиентов и повысить эффективность рекламы. Никаких разочаровывающих сломанных колес или тяжелых, неудобных для переноски мусорных баков, которые вынуждают клиентов отказываться от потенциальных покупок. Good L Corp’s поставляет высокопроизводительные покупательские тележки и корзины премиум-качества различных размеров, обеспечивающие производительность и удобство, которые удовлетворят потребности каждого покупателя, мгновенно сокращая ситуации с потерей прибыли, которые напрямую влияют на ваши доходы.

Покупайте нашу продукцию

Корзины и тележки американского производства Good L Corporation выпускаются в различных размерах, цветах и ​​конфигурациях, чтобы покупатель мог получить действительно индивидуальное впечатление. Мы используем самые лучшие доступные материалы для превосходной функциональности, долговечности и удобства для клиентов. Купите линейку продуктов Good L Corp сегодня, чтобы получить производительность, которой вы можете доверять!

Корзины для покупок

Узнать больше

Тележки с корзинами

Узнать больше

Тележки для покупок

Узнать больше

Специальные тележки

Узнать больше

Корзины для покупок

Быстрый просмотр

149,99 $ 209,99 $

Быстрый просмотр

299,99 $

Быстрый просмотр

249,99 $

Быстрый просмотр

199,99 $

Быстрый просмотр

199,99 $

Быстрый просмотр

299,99 $

Quick View

299,99 $

Тележки с корзинами

Быстрый просмотр

129,99 $

Быстрый просмотр

109,99 $

Быстрый просмотр

99,99 $

Quick View

89,99 $

Тележки для покупок

Быстрый просмотр

199,99 $

Быстрый просмотр

119,99 $

Быстрый просмотр

129,99 $

Быстрый просмотр

139,99 $

Быстрый просмотр

139,99 $

Быстрый просмотр

159,99 $

Быстрый просмотр

169,99 $

Быстрый просмотр

179,99 $

Great Brands Trust Good L

Корзины и тележки для покупок — Склад снабжения магазина

Корзины и тележки для покупок — Склад снабжения магазина

Дом

Категории

Магазины общего назначения

Корзины и тележки для покупок

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

Фильтр

Типы продуктов

Корзина для покупок (4)

Корзина (1)

Цвет

Синий (3)

Красный (3)

Черный (2)

серый (1)

Винтаж (1)

Размер

Большой (1)

Стандарт (3)

Материал

Пластик (3)

Металл (2)

Количество

10 (1)

12 (2)

Размеры

12 х 17 х 8,5 (2)

12 х 17 х 7 (1)

16 х 12 х 8,25 (1)

17 х 12 х 7 (1)

21 х 14,75 х 16,5 (1)


Артикул № 26122

Набор из 10 красных корзин для покупок Rolling Red

Красный Синий

В наличии

Добавить в корзину


Артикул № 26126

Синяя корзина для покупок

Синий Красный

В наличии

Добавить в корзину


Артикул № 26105

Набор из 12 красных корзин для покупок

Красный Синий

В наличии

Добавить в корзину


Артикул № 26132

Набор корзин для покупок из черного металла

В наличии

Добавить в корзину


Артикул № 26133

Корзина для покупок из черного металла

В наличии

Добавить в корзину


Артикул № 60818

Винтажная корзина для бутика

В наличии

В корзину


Артикул № 26129

Мини-корзина

В наличии

Добавить в корзину


Артикул №

Добавить в корзину

Обновление вашей корзины.