Skip to main content

Simple django cart manager for your django projects.

Project description

dj-shop-cart

A simple and flexible cart manager for your django projects.

pypi python django MIT License black

This is a work in progress, expect api breaking changes, pin the exact version you are using

Features

  • Add, remove, decrement and clear items from cart
  • Authenticated users cart can be saved to database
  • Write custom methods to easily hook into the items add / remove flow
  • Custom get_price method to ensure that the cart always have an up-to-date products price
  • Each item in the cart hold a reference to the associated product
  • Metadata data can be attached to cart items
  • Supports specification of product variation details
  • Available context processor for easy access to the user cart in all your django templates

Installation

Install dj-shop-cart with pip or poetry.

  pip install dj-shop-cart

Usage/Examples

# settings.py

INSTALLED_APPS = [
    ...,
    "dj_shop_cart", # If you want the cart to be stored in the database when users are authenticated
    ...,
]

TEMPLATES = [
    {
        "OPTIONS": {
            "context_processors": [
                ...,
                "dj_shop_cart.context_processors.cart", # If you want access to the cart instance in all templates
            ],
        },
    }
]

# models.py

from django.db import models
from dj_shop_cart.cart import CartItem
from decimal import Decimal

class Product(models.Model):
    ...

    def get_price(self, item:CartItem)->Decimal:
        """The only requirements of the dj_shop_cart package apart from the fact that the products you add
        to the cart must be instances of django based models. You can use a different name for this method
        but be sure to update the corresponding setting (see Configuration). Even if you change the name the
        function signature should match this one.
        """


# views.py

from dj_shop_cart.cart import get_cart_manager_class
from django.http import HttpRequest
from django.views.decorators.http import require_POST

# This function has nothing to do with the package itself
from .helpers import collect_params

Cart = get_cart_manager_class()


@require_POST
def add_product(request: HttpRequest):
    product, quantity = collect_params(request)
    cart = Cart.new(request)
    cart.add(product, quantity=quantity)
    ...


@require_POST
def remove_product(request: HttpRequest):
    product, quantity = collect_params(request)
    cart = Cart.new(request)
    cart.remove(product, quantity=quantity)
    ...


@require_POST
def empty_cart(request: HttpRequest):
    Cart.new(request).empty()
    ...

Configuration

Configure the cart behaviour in your Django settings. All settings are optional.

Name Type Description Default
CART_SESSION_KEY str The key used to store the cart in session CART-ID
CART_MANAGER_CLASS str The path to a custom Cart manager class. The custom class need to be a subclass of dj_shop_cart.cart.Cart None
CART_PRODUCT_GET_PRICE str The method name to use to dynamically get the price on the product instance get_price

Development

Poetry is required (not really, you can set up the environment however you want and install the requirements manually) to set up a virtualenv, install it then run the following:

poetry install
pre-commit install --install-hooks

Tests can then be run quickly in that environment:

pytest

Feedback

If you have any feedback, please reach out to me at degnonfrancis@gmail.com

Todos

  • Add api reference in readme
  • Add Used by section to readme
  • Add a redis storage backend and rework the api for easy integration of custom storage backends
  • More examples
  • Complete the example project
  • Write more tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dj-shop-cart-3.0.5.tar.gz (10.1 kB view hashes)

Uploaded Source

Built Distribution

dj_shop_cart-3.0.5-py3-none-any.whl (10.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page