Skip to main content

dj-shop-cart

A simple and flexible cart manager for your django projects.

pypi python django MIT License black

✨📚✨ Read the full documentation

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
  • Swappable backend storage, with session and database provided by default

Installation

Install dj-shop-cart with pip or poetry.

  pip install dj-shop-cart

Quickstart

# settings.py

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 dj_shop_cart.protocols import Numeric

class Product(models.Model):
    ...

    def get_price(self, item:CartItem) -> Numeric:
        """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 Cart
from django.http import HttpRequest
from django.views.decorators.http import require_POST
from django.shortcuts import get_object_or_404

from .models import Product


@require_POST
def add_product(request: HttpRequest, product_id:int):
    product = get_object_or_404(Product.objects.all(), pk=product_id)
    quantity = int(request.POST.get("quantity"))
    cart = Cart.new(request)
    cart.add(product, quantity=quantity)
    ...


@require_POST
def remove_product(request: HttpRequest):
    item_id = request.POST.get("item_id")
    quantity = int(request.POST.get("quantity"))
    cart = Cart.new(request)
    cart.remove(item_id=item_id, quantity=quantity)
    ...


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

Used By

This project is used by the following companies:

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 tobidegnon@proton.me.

Metadata

Release files for dj-shop-cart 8.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dj-shop-cart 8.0.1
File Size Uploaded
dj_shop_cart-8.0.1.tar.gz 8.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dj-shop-cart 8.0.1
File Interpreter ABI Platform
dj_shop_cart-8.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.7 kB

Release files / dj_shop_cart-8.0.1.tar.gz

Download URL dj_shop_cart-8.0.1.tar.gz
Size 8.1 kB
Tags Source
SHA-256 checksum
How to use checksums
8906f08ff977e745201ce14b185c38168ab41c2b7178cdf35d44bb6facb7aae7
BLAKE2b-256 checksum
How to use checksums
2f434274061e70a0a7c495ef867ba8e6f9432ec43acce4a900cf5f074facf07c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Bluefin","version":"43","id":"Deinonychus","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / dj_shop_cart-8.0.1-py3-none-any.whl

Download URL dj_shop_cart-8.0.1-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7b70021a06dd8042c5e58e012d9d2ab5360b5ae7355f4682821f0022c69ed8d2
BLAKE2b-256 checksum
How to use checksums
116b43791b383e59ce2459dcf59bf6c4345e54a08ac2aa32849d7c99e910f94f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Bluefin","version":"43","id":"Deinonychus","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

8.0.1 This release

2 release files

8.0.0

2 release files

7.1.1

2 release files

7.1.0

2 release files

7.0.3

2 release files

7.0.2

2 release files

7.0.1

2 release files

7.0.0

2 release files

6.1.0

2 release files

6.0.1

2 release files

6.0.0

2 release files

5.6.0

2 release files

5.5.2

2 release files

5.5.1

2 release files

5.4.0

2 release files

5.3.2

2 release files

5.3.1

2 release files

5.3.0

2 release files

5.2.0

2 release files

5.1.2

2 release files

5.1.1

2 release files

5.1.0

2 release files

5.0.1

2 release files

5.0.0

2 release files

4.1.0

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.0.5

2 release files

3.0.4

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page