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

✨📚✨ 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.

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-8.0.0a0.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

dj_shop_cart-8.0.0a0-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file dj_shop_cart-8.0.0a0.tar.gz.

File metadata

  • Download URL: dj_shop_cart-8.0.0a0.tar.gz
  • Upload date:
  • Size: 10.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.11-300.fc40.x86_64

File hashes

Hashes for dj_shop_cart-8.0.0a0.tar.gz
Algorithm Hash digest
SHA256 cdcd1ac29132a5a5b33733c0d50e2811653739fc1df452636f0ecd959c95c3fb
MD5 e841a1b356a6b2b79784cc6ed32d0b45
BLAKE2b-256 8df490e0ea4b267dea8a4140b5209fcdee97e16081adc4e256700598aac295e7

See more details on using hashes here.

File details

Details for the file dj_shop_cart-8.0.0a0-py3-none-any.whl.

File metadata

  • Download URL: dj_shop_cart-8.0.0a0-py3-none-any.whl
  • Upload date:
  • Size: 12.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.11-300.fc40.x86_64

File hashes

Hashes for dj_shop_cart-8.0.0a0-py3-none-any.whl
Algorithm Hash digest
SHA256 f45f886ac28db65919ba52584e974e4026fed11fc2f97615126e29079147f6ba
MD5 34bc3e2c56388469db1d149f58362cde
BLAKE2b-256 de8db959cae0e9dec6625d2c0d35053f33ec9007d68db604e631c793f2e82a74

See more details on using hashes here.

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