Domain-driven e-commerce for Django

Overview
https://github.com/django-oscar/django-oscar/raw/master/docs/images/logos/oscar.png

Domain-driven e-commerce for Django

Oscar is an e-commerce framework for Django designed for building domain-driven sites. It is structured such that any part of the core functionality can be customised to suit the needs of your project. This allows a wide range of e-commerce requirements to be handled, from large-scale B2C sites to complex B2B sites rich in domain-specific business logic.

Contents:

https://github.com/django-oscar/django-oscar/raw/master/docs/images/screenshots/oscarcommerce.thumb.png https://github.com/django-oscar/django-oscar/raw/master/docs/images/screenshots/readthedocs.thumb.png

Further reading:

Continuous integration status:

Coverage Requirements Status

PyPI status:

Docs status:

Documentation Status

Core team:

Supported versions

The currently supported versions of Oscar are:

Version End of support
3.0 April 2021
2.1 LTS August 2023

Supported verions are eligible for fixes for data loss bugs and security issues. Releases designated as Long-term support (LTS) releases will receive support for an extended period of 3 years from their release date.

Screenshots

Sandbox

These are screenshots from the 'sandbox' example site that ships with Oscar. It sports a simple design built with Twitter's Bootstrap and provides a good starting point for rapidly building elegant e-commerce sites.

https://github.com/django-oscar/django-oscar/raw/master/docs/images/screenshots/browse.thumb.png https://github.com/django-oscar/django-oscar/raw/master/docs/images/screenshots/detail.thumb.png https://github.com/django-oscar/django-oscar/raw/master/docs/images/screenshots/basket.thumb.png https://github.com/django-oscar/django-oscar/raw/master/docs/images/screenshots/dashboard.thumb.png

The sandbox site is also available to browse at https://latest.oscarcommerce.com.

The sandbox site can be set-up locally in 5 commands. Want to make changes? Check out the contributing guidelines.

Extensions

The following extensions are stable and ready for use:

The following are community-written extensions:

Let us know if you're writing a new one!

Videos

Videos with talks about Oscar:

License

Oscar is released under the permissive New BSD license (see summary).

Case studies

Oscar is still in active development but is used in production by a range of companies, from large multinationals to small, boutique stores. See http://oscarcommerce.com/cases.html for an overview.

Many more on the way. If you use Oscar in production, please let us know.

Looking for commercial support?

If you are interested in having an Oscar project built for you, or for development of an existing Oscar site then please get in touch via [email protected].

Comments
  • get_model cannot load catalogue.Product

    get_model cannot load catalogue.Product

    For this code:

    from oscar.core.loading import get_model
    get_model('catalogue', 'Product')
    

    I get the following traceback

    Traceback (most recent call last):
      File "trigger_bug.py", line 2, in <module>
        get_model('catalogue', 'Product')
      File "/home/markus/src/django-oscar/oscar/core/loading.py", line 189, in get_model
        model = django_get_model(app_label, model_name, *args, **kwargs)
      File "/home/markus/src/django/django/db/models/loading.py", line 271, in get_model
        self._populate()
      File "/home/markus/src/django/django/db/models/loading.py", line 78, in _populate
        self.load_app(app_name)
      File "/home/markus/src/django/django/db/models/loading.py", line 99, in load_app
        models = import_module('%s.models' % app_name)
      File "/home/markus/src/django/django/utils/importlib.py", line 40, in import_module
        __import__(name)
      File "/home/markus/src/django-oscar/oscar/apps/customer/models.py", line 20, in <module>
        from oscar.apps.customer.history import *  # noqa
      File "/home/markus/src/django-oscar/oscar/apps/customer/history.py", line 9, in <module>
        Product = get_model('catalogue', 'Product')
      File "/home/markus/src/django-oscar/oscar/core/loading.py", line 193, in get_model
        app_label=app_label, model_name=model_name))
    ImportError: catalogue.Product could not be imported.
    

    For a very simple oscar project that has been set up as follows:

    $ django-admin.py startproject thebug
    $ cd thebug
    $ mkdir -p apps/dashboard/catalogue
    $ touch apps{,/dashboard{,/catalogue}}/__init__.py
    $ cat >> thebug/settings.py
    from oscar import get_core_apps
    
    INSTALLED_APPS = [
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'django.contrib.flatpages',
        'south',
        'compressor',
    ] + get_core_apps(['apps.dashboard.catalogue'])
    
    SITE_ID = 1
    
    STATIC_ROOT = 'static'
    
    HAYSTACK_CONNECTIONS = {
        'default': {
            'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
        },
    }
    
    from oscar.defaults import *  # noqa
    ^D
    $ export DJANGO_SETTINGS_MODULE=thebug.settings
    $ cat > trigger_bug.py
    from oscar.core.loading import get_model
    get_model('catalogue', 'Product')
    ^D
    $ python ./trigger_bug.py
    
    opened by mbertheau 41
  • Update dashboard to bootstrap 3

    Update dashboard to bootstrap 3

    Use bootstrap 3 for the dashboard, this is based on the bootstrap3 branch.

    This needs a good review before it is merged, and we might want to remove the bootstrap2 files from the repository.

    TODO (by @mbertheau):

    • [x] remove bootstrap2 files
    • [x] remove bootstrap2 variables for variables.less
    • [ ] test with a real world customized dashboard
    • [x] resolve the partner dashboard issue (3d40611)
    • [x] move customizations in dashboard.less to a separate file that's included in dashboard.less. That way implementations can have their own dashboard.less that includes a bootstrap3 variables.less that is customized and still reuse oscar styles that are now in dashboard.less
    ✍ For review 
    opened by mvantellingen 23
  • is_public field for Products

    is_public field for Products

    This allows to disable a product, without having to delete it. A staff member can still view the product on the website via the dashboard so styling issues or offers can be tested.

    This introduces browsable_dashboard so the user can see disabled products in the dashboard.

    opened by jaroel 21
  • Product Structure and Attributes

    Product Structure and Attributes

    Hi all

    I've now been hard at work implementing our new shop in django oscar. Sadly django-oscar isn't very good at product variations and attributes. I'm considering how to fix this, and would like some input from the community.

    Imo the best and simplest implementation would be to have every product be a variation, even if it's a standalone product. This greatly simplifies working with products all around the framework, and would make product editing in the dashboard more intuitive. You could even change the layout in the dashboard if only a single variation is created.

    I've made a little list of things that the variation system should be able to handle.

    • Variant generation from attributes set in product class
    • No duplicate variants should be allowed
    • Multi inline editing of variants
    • Image on variants (for automatic image switching on product page)

    Regarding Attributes i have some ideas as well. First order of business would be to unify Options and Attributes. It's confusing that these are 2 separate entities. This would entail removing the AbstractOption model, this is already confusing since the only way to add options is through django admin. There should be a global entry to manage attributes. Looking through the current models, it seems like much of this can be implemented right away, with a few modifications.

    and here is a list of the thing attributes should able to handle

    • Attributes should have it's own global management, and then be attached to product classes
    • Swatch type on the ProductAttributeValue (for handling frontend representation e.g. Color, Image etc.)

    There's probably more stuff that i forgot in this writeup, so please let me know if missed anything and if you are interested in helping out implementing. Obviously much of the work will be in the frontend, and i think i read somewhere that the dashboard was about to be rewritten, so if anyone has information on this i would be glad to have it.

    Cheers

    opened by jakobholmelund 21
  • Remove django-compressor

    Remove django-compressor

    And replace it with a gulp file that automatically rebuilds the css when the less files change and possibly more bells and whistles.

    I feel that django-compressor adds too much runtime complexity for frontend developer convenience that she is now used to getting from gulp and friends. Also, gulp and friends do a much better job at being convenient for the modern frontend developer:

    • sourcemap support
    • freedom of choice to use or not use django-compressor in the frontend. Right now if you want to use django-compressor in the frontend, you have to use it in the dashboard as well.
    • no confusion and complexity arising from the fact that django-compressor parses templates outside of their normal context, bypassing inheritance (Blocks jquery-ui-(js|css) by yours truly)

    I'm implementing this as we speak.

    Concerns #796.

    ✍ For review 
    opened by mbertheau 21
  • Performance issues 1.1

    Performance issues 1.1

    Since 1.1 the category slug and full_name are not denormalised anymore, which results in a massive number (5000+) of queries in the dashboard and the frontend.

    The relevant commits are:

    • https://github.com/django-oscar/django-oscar/commit/283fb600abacfb9a4b2eebb867b6e64f0297bd73
    • https://github.com/django-oscar/django-oscar/commit/6f2119ffeb52109cff977ad8ae5b723128bd6c09

    I think the only option is to start denormalising the values again. But if anyone has a better proposal then pleat let me know.

    ☁ Bug 
    opened by mvantellingen 20
  • Can't extend AbstractUser within customised customer app

    Can't extend AbstractUser within customised customer app

    According to Django documentation we cant' use get_user_model in this context.

    Related Django bug - https://code.djangoproject.com/ticket/19218.

    I'm still thinking it's a bug in Django, but it's always easier to document the limitations. :)

    opened by martyanov 20
  • Bootstrap 3 Migration

    Bootstrap 3 Migration

    opened by timjacobi 20
  • Bootstrap3 migration for frontend templates

    Bootstrap3 migration for frontend templates

    We did our best to keep the UI close to the bootstrap2 version, but there are some differences.

    Some partials were shared between dashboard templates and frontend templates, so we had to duplicate them in dashboard/partials/.

    • CSS are compiled
    • tests are passing
    • please tell us if we missed something
    ✿ Front-end 
    opened by kapt 19
  • AttributeError: 'NoneType' object has no attribute 'STATUS_CHOICES'

    AttributeError: 'NoneType' object has no attribute 'STATUS_CHOICES'

    Using 0.6 version this is happening to me. I had to use 0.5.1 version, and the error disappeared.

    (test-oscar)[email protected]:~/code/test-ecommerce/test$ ./manage.py syncdb --noinput --settings test.settings.local
    /home/user/venv/test-oscar/local/lib/python2.7/site-packages/sorl/thumbnail/helpers.py:5: DeprecationWarning: django.utils.simplejson is deprecated; use json instead.
      from django.utils import simplejson
    
    Traceback (most recent call last):
      File "./manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
        utility.execute()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
        self.execute(*args, **options.__dict__)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/management/base.py", line 284, in execute
        self.validate()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/management/base.py", line 310, in validate
        num_errors = get_validation_errors(s, app)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/management/validation.py", line 34, in get_validation_errors
        for (app_name, error) in get_app_errors().items():
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 196, in get_app_errors
        self._populate()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
        self.load_app(app_name, True)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
        models = import_module('%s.models' % app_name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
        __import__(name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/catalogue/models.py", line 66, in <module>
        from .receivers import *  # noqa
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/catalogue/receivers.py", line 10, in <module>
        ProductImage = get_model('catalogue', 'ProductImage')
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 271, in get_model
        self._populate()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
        self.load_app(app_name, True)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
        models = import_module('%s.models' % app_name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
        __import__(name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/customer/models.py", line 20, in <module>
        from oscar.apps.customer.history import *  # noqa
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/customer/history.py", line 9, in <module>
        Product = get_model('catalogue', 'Product')
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 271, in get_model
        self._populate()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
        self.load_app(app_name, True)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
        models = import_module('%s.models' % app_name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
        __import__(name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/dashboard/ranges/models.py", line 8, in <module>
        Product = models.get_model('catalogue', 'Product')
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 271, in get_model
        self._populate()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
        self.load_app(app_name, True)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
        models = import_module('%s.models' % app_name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
        __import__(name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/debug_toolbar/models.py", line 63, in <module>
        patch_root_urlconf()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/debug_toolbar/models.py", line 51, in patch_root_urlconf
        reverse('djdt:render_panel')
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 480, in reverse
        app_list = resolver.app_dict[ns]
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 310, in app_dict
        self._populate()
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 262, in _populate
        for pattern in reversed(self.url_patterns):
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 346, in url_patterns
        patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 341, in urlconf_module
        self._urlconf_module = import_module(self.urlconf_name)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
        __import__(name)
      File "/home/user/code/test-ecommerce/test/test/urls.py", line 2, in <module>
        from oscar.app import application
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/app.py", line 11, in <module>
        class Shop(Application):
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/app.py", line 20, in Shop
        dashboard_app = get_class('dashboard.app', 'application')
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/core/loading.py", line 32, in get_class
        return get_classes(module_label, [classname])[0]
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/core/loading.py", line 85, in get_classes
        imported_module = __import__(module_path, fromlist=classnames)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/dashboard/app.py", line 8, in <module>
        class DashboardApplication(Application):
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/dashboard/app.py", line 17, in DashboardApplication
        users_app = get_class('dashboard.users.app', 'application')
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/core/loading.py", line 32, in get_class
        return get_classes(module_label, [classname])[0]
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/core/loading.py", line 85, in get_classes
        imported_module = __import__(module_path, fromlist=classnames)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/dashboard/users/app.py", line 4, in <module>
        from oscar.apps.dashboard.users import views
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/dashboard/users/views.py", line 17, in <module>
        'ProductAlertUpdateForm'))
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/core/loading.py", line 85, in get_classes
        imported_module = __import__(module_path, fromlist=classnames)
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/dashboard/users/forms.py", line 32, in <module>
        class ProductAlertSearchForm(forms.Form):
      File "/home/user/venv/test-oscar/local/lib/python2.7/site-packages/oscar/apps/dashboard/users/forms.py", line 35, in ProductAlertSearchForm
        ) + ProductAlert.STATUS_CHOICES
    AttributeError: 'NoneType' object has no attribute 'STATUS_CHOICES'
    
    opened by ldgarcia 19
  • Refactor communications

    Refactor communications

    Refs #319 #783

    Summary:

    • Created separate app - communication.
    • Dispatcher moved to communication app's utils.
    • Dispatcher improved with methods to send each separate email.
    • Added ability to send email with attachments.
    • All event codes (for each separate email) now kept in Dispatcher.
    • Sending notifications moved to communication app as well.
    • Added ability to chose if sent email should be saved to DB (through OSCAR_SAVE_SENT_EMAILS_TO_DB, True by default).
    • All relevant models moved from customer app to communication app (with data migrations) - CommunicationEventType, Email and Notification.
    • Moved classes and models added to MOVED_CLASSES and MOVED_MODELS.
    • Tests adapted to check new functionality.
    • Added tests to check the sending of each separate email.
    • Deleted TestOrderPlacementMixin - Now we use Dispatcher to send emails and code (event code) does not used when we get message context for email that informs about a placed order.
    • All emails' templates (commtype_*) moved from customer/emails to communication/emails.
    • Templates from customer/email/*.html and customer/notification/*.html moved to communication/email/*.html and communication/notification/*.html.
    opened by sasha0 17
  • Bump eslint from 8.22.0 to 8.31.0

    Bump eslint from 8.22.0 to 8.31.0

    Bumps eslint from 8.22.0 to 8.31.0.

    Release notes

    Sourced from eslint's releases.

    v8.31.0

    Features

    • 52c7c73 feat: check assignment patterns in no-underscore-dangle (#16693) (Milos Djermanovic)
    • b401cde feat: add options to check destructuring in no-underscore-dangle (#16006) (Morten Kaltoft)
    • 30d0daf feat: group properties with values in parentheses in key-spacing (#16677) (Francesco Trotta)

    Bug Fixes

    • 35439f1 fix: correct syntax error in prefer-arrow-callback autofix (#16722) (Francesco Trotta)
    • 87b2470 fix: new instance of FlatESLint should load latest config file version (#16608) (Milos Djermanovic)

    Documentation

    • 4339dc4 docs: Update README (GitHub Actions Bot)
    • 4e4049c docs: optimize code block structure (#16669) (Sam Chen)
    • 54a7ade docs: do not escape code blocks of formatters examples (#16719) (Sam Chen)
    • e5ecfef docs: Add function call example for no-undefined (#16712) (Elliot Huffman)
    • a3262f0 docs: Add mastodon link (#16638) (Amaresh S M)
    • a14ccf9 docs: clarify files property (#16709) (Sam Chen)
    • 3b29eb1 docs: fix npm link (#16710) (Abdullah Osama)
    • a638673 docs: fix search bar focus on Esc (#16700) (Shanmughapriyan S)
    • f62b722 docs: country flag missing in windows (#16698) (Shanmughapriyan S)
    • 4d27ec6 docs: display zh-hans in the docs language switcher (#16686) (Percy Ma)
    • 8bda20e docs: remove manually maintained anchors (#16685) (Percy Ma)
    • b68440f docs: User Guide Getting Started expansion (#16596) (Ben Perlmutter)

    Chores

    • 65d4e24 chore: Upgrade @​eslint/eslintrc@​1.4.1 (#16729) (Brandon Mills)
    • 8d93081 chore: fix CI failure (#16721) (Sam Chen)
    • 8f17247 chore: Set up automatic updating of README (#16717) (Nicholas C. Zakas)
    • 4cd87cb ci: bump actions/stale from 6 to 7 (#16713) (dependabot[bot])
    • fd20c75 chore: sort package.json scripts in alphabetical order (#16705) (Darius Dzien)
    • 10a5c78 chore: update ignore patterns in eslint.config.js (#16678) (Milos Djermanovic)

    v8.30.0

    Features

    • 075ef2c feat: add suggestion for no-return-await (#16637) (Daniel Bartholomae)
    • 7190d98 feat: update globals (#16654) (Sébastien Règne)

    Bug Fixes

    • 1a327aa fix: Ensure flat config unignores work consistently like eslintrc (#16579) (Nicholas C. Zakas)
    • 9b8bb72 fix: autofix recursive functions in no-var (#16611) (Milos Djermanovic)

    Documentation

    • 6a8cd94 docs: Clarify Discord info in issue template config (#16663) (Nicholas C. Zakas)
    • ad44344 docs: CLI documentation standardization (#16563) (Ben Perlmutter)
    • 293573e docs: fix broken line numbers (#16606) (Sam Chen)
    • fa2c64b docs: use relative links for internal links (#16631) (Percy Ma)
    • 75276c9 docs: reorder options in no-unused-vars (#16625) (Milos Djermanovic)
    • 7276fe5 docs: Fix anchor in URL (#16628) (Karl Horky)
    • 6bef135 docs: don't apply layouts to html formatter example (#16591) (Tanuj Kanti)
    • dfc7ec1 docs: Formatters page updates (#16566) (Ben Perlmutter)

    ... (truncated)

    Changelog

    Sourced from eslint's changelog.

    v8.31.0 - December 31, 2022

    • 65d4e24 chore: Upgrade @​eslint/eslintrc@​1.4.1 (#16729) (Brandon Mills)
    • 35439f1 fix: correct syntax error in prefer-arrow-callback autofix (#16722) (Francesco Trotta)
    • 87b2470 fix: new instance of FlatESLint should load latest config file version (#16608) (Milos Djermanovic)
    • 8d93081 chore: fix CI failure (#16721) (Sam Chen)
    • 4339dc4 docs: Update README (GitHub Actions Bot)
    • 8f17247 chore: Set up automatic updating of README (#16717) (Nicholas C. Zakas)
    • 4e4049c docs: optimize code block structure (#16669) (Sam Chen)
    • 54a7ade docs: do not escape code blocks of formatters examples (#16719) (Sam Chen)
    • 52c7c73 feat: check assignment patterns in no-underscore-dangle (#16693) (Milos Djermanovic)
    • e5ecfef docs: Add function call example for no-undefined (#16712) (Elliot Huffman)
    • a3262f0 docs: Add mastodon link (#16638) (Amaresh S M)
    • 4cd87cb ci: bump actions/stale from 6 to 7 (#16713) (dependabot[bot])
    • a14ccf9 docs: clarify files property (#16709) (Sam Chen)
    • 3b29eb1 docs: fix npm link (#16710) (Abdullah Osama)
    • fd20c75 chore: sort package.json scripts in alphabetical order (#16705) (Darius Dzien)
    • a638673 docs: fix search bar focus on Esc (#16700) (Shanmughapriyan S)
    • f62b722 docs: country flag missing in windows (#16698) (Shanmughapriyan S)
    • 4d27ec6 docs: display zh-hans in the docs language switcher (#16686) (Percy Ma)
    • 8bda20e docs: remove manually maintained anchors (#16685) (Percy Ma)
    • b401cde feat: add options to check destructuring in no-underscore-dangle (#16006) (Morten Kaltoft)
    • b68440f docs: User Guide Getting Started expansion (#16596) (Ben Perlmutter)
    • 30d0daf feat: group properties with values in parentheses in key-spacing (#16677) (Francesco Trotta)
    • 10a5c78 chore: update ignore patterns in eslint.config.js (#16678) (Milos Djermanovic)

    v8.30.0 - December 16, 2022

    • f2c4737 chore: upgrade @​eslint/eslintrc@​1.4.0 (#16675) (Milos Djermanovic)
    • 1a327aa fix: Ensure flat config unignores work consistently like eslintrc (#16579) (Nicholas C. Zakas)
    • 075ef2c feat: add suggestion for no-return-await (#16637) (Daniel Bartholomae)
    • ba74253 chore: standardize npm script names per #14827 (#16315) (Patrick McElhaney)
    • 6a8cd94 docs: Clarify Discord info in issue template config (#16663) (Nicholas C. Zakas)
    • 0d9af4c ci: fix npm v9 problem with file: (#16664) (Milos Djermanovic)
    • 7190d98 feat: update globals (#16654) (Sébastien Règne)
    • ad44344 docs: CLI documentation standardization (#16563) (Ben Perlmutter)
    • 90c9219 refactor: migrate off deprecated function-style rules in all tests (#16618) (Bryan Mishkin)
    • 9b8bb72 fix: autofix recursive functions in no-var (#16611) (Milos Djermanovic)
    • 293573e docs: fix broken line numbers (#16606) (Sam Chen)
    • fa2c64b docs: use relative links for internal links (#16631) (Percy Ma)
    • 75276c9 docs: reorder options in no-unused-vars (#16625) (Milos Djermanovic)
    • 7276fe5 docs: Fix anchor in URL (#16628) (Karl Horky)
    • 6bef135 docs: don't apply layouts to html formatter example (#16591) (Tanuj Kanti)
    • dfc7ec1 docs: Formatters page updates (#16566) (Ben Perlmutter)
    • 8ba124c docs: update the prefer-const example (#16607) (Pavel)
    • e6cb05a docs: fix css leaking (#16603) (Sam Chen)

    v8.29.0 - December 2, 2022

    • 0311d81 docs: Configuring Plugins page intro, page tweaks, and rename (#16534) (Ben Perlmutter)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • Update redis requirement from <4.4,>=3.5 to >=3.5,<4.5

    Update redis requirement from <4.4,>=3.5 to >=3.5,<4.5

    Updates the requirements on redis to permit the latest version.

    Release notes

    Sourced from redis's releases.

    Version 4.4.0

    Changes

    4.4.0rc4 release notes 4.4.0rc3 release notes 4.4.0rc2 release notes 4.4.0rc1 release notes

    🚀 New Features (since 4.4.0rc4)

    • Async clusters: Support creating locks inside async functions (#2471)

    🐛 Bug Fixes (since 4.4.0rc4)

    • Async: added 'blocking' argument to call lock method (#2454)
    • Added a replacement for the default cluster node in the event of failure. (#2463)
    • Fixed geosearch: Wrong number of arguments for geosearch command (#2464)

    🧰 Maintenance (since 4.4.0rc4)

    • Updating dev dependencies (#2475)
    • Removing deprecated LGTM (#2473)
    • Added an explicit index name in RediSearch example (#2466)
    • Adding connection step to bloom filter examples (#2478)

    Contributors (since 4.4.0rc4)

    We'd like to thank all the contributors who worked on this release!

    @​Sibuken, @​barshaul, @​chayim, @​dvora-h, @​nermiller, @​uglide and @​utkarshgupta137

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • Update django-debug-toolbar requirement from <3.6,>=2.2 to >=2.2,<3.9

    Update django-debug-toolbar requirement from <3.6,>=2.2 to >=2.2,<3.9

    Updates the requirements on django-debug-toolbar to permit the latest version.

    Release notes

    Sourced from django-debug-toolbar's releases.

    3.8.1

    Note: 3.8.0 was not released, use 3.8.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/3.7...3.8.1

    Changelog

    Sourced from django-debug-toolbar's changelog.

    3.8.1 (2022-12-03)

    • Fixed release process by re-adding twine to release dependencies. No functional change.

    3.8.0 (2022-12-03)

    • Added protection against division by 0 in timer.js
    • Auto-update History panel for JavaScript fetch requests.
    • Support HTMX boosting <https://htmx.org/docs/#boosting/>__ and Turbo <https://turbo.hotwired.dev/>__ pages.
    • Simplify logic for Panel.enabled property by checking cookies earlier.
    • Include panel scripts in content when RENDER_PANELS is set to True.
    • Create one-time mouseup listener for each mousedown when dragging the handle.
    • Update package metadata to use Hatchling.
    • Fix highlighting on history panel so odd rows are highlighted when selected.
    • Formalize support for Python 3.11.

    3.7.0 (2022-09-25)

    • Added Profiling panel setting PROFILER_THRESHOLD_RATIO to give users better control over how many function calls are included. A higher value will include more data, but increase render time.
    • Update Profiling panel to include try to always include user code. This code is more important to developers than dependency code.
    • Highlight the project function calls in the profiling panel.
    • Added Profiling panel setting PROFILER_CAPTURE_PROJECT_CODE to allow users to disable the inclusion of all project code. This will be useful to project setups that have dependencies installed under settings.BASE_DIR.
    • The toolbar's font stack now prefers system UI fonts. Tweaked paddings, margins and alignments a bit in the CSS code.
    • Only sort the session dictionary when the keys are all strings. Fixes a bug that causes the toolbar to crash when non-strings are used as keys.

    3.6.0 (2022-08-17)

    • Remove decorator signed_data_view as it was causing issues with django-urlconfchecks <https://github.com/AliSayyah/django-urlconfchecks/>__.
    • Added pygments to the test environment and fixed a crash when using the template panel with Django 4.1 and pygments installed.
    • Stayed on top of pre-commit hook and GitHub actions updates.
    • Added some workarounds to avoid a Chromium warning which was worrisome to developers.

    ... (truncated)

    Commits
    • 6e265c1 Version 3.8.1
    • 47e6f1a Fix release job by including twine to check distributions.
    • d2be499 Version 3.8.0
    • bc195b1 Formalize support for Python 3.11.
    • be01d51 Update changelog.
    • 00bc368 Attach handlers to djdebug instead of document
    • d04b9d1 [pre-commit.ci] pre-commit autoupdate
    • d9b25f2 Added TOOLBAR_LANGUAGE setting.
    • a0681c9 [pre-commit.ci] pre-commit autoupdate (#1701)
    • a481849 Fix highlighting on history panel (#1698)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump isort from 5.10.1 to 5.11.4

    Bump isort from 5.10.1 to 5.11.4

    Bumps isort from 5.10.1 to 5.11.4.

    Release notes

    Sourced from isort's releases.

    5.11.4

    Changes

    :package: Dependencies

    5.11.3

    Changes

    :beetle: Fixes

    :construction_worker: Continuous Integration

    v5.11.3

    Changes

    :beetle: Fixes

    :construction_worker: Continuous Integration

    5.11.2

    Changes

    5.11.1

    Changes December 12 2022

    ... (truncated)

    Changelog

    Sourced from isort's changelog.

    5.11.4 December 21 2022

    5.11.3 December 16 2022

    5.11.2 December 12 2022

    5.11.1 December 12 2022

    5.11.0 December 12 2022

    Commits
    • 98390f5 Merge pull request #2059 from PyCQA/version/5.11.4
    • df69a05 Bump version 5.11.4
    • f9add58 Merge pull request #2058 from PyCQA/deps/poetry-1.3.1
    • 36caa91 Bump Poetry 1.3.1
    • 3c2e2d0 Merge pull request #1978 from mgorny/toml-test
    • 45d6abd Remove obsolete toml import from the test suite
    • 3020e0b Merge pull request #2057 from mgorny/poetry-install
    • a6fdbfd Stop installing documentation files to top-level site-packages
    • ff306f8 Fix tag template to match old standard
    • 227c4ae Merge pull request #2052 from hugovk/main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump sass from 1.54.0 to 1.57.1

    Bump sass from 1.54.0 to 1.57.1

    Bumps sass from 1.54.0 to 1.57.1.

    Release notes

    Sourced from sass's releases.

    Dart Sass 1.57.1

    To install Sass 1.57.1, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.

    Changes

    • No user-visible changes.

    See the full changelog for changes in earlier releases.

    Dart Sass 1.57.0

    To install Sass 1.57.0, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.

    Changes

    • Add a split($string, $separator, $limit: null) function to sass:string that splits a string into separate substrings based on a separator string.

    JavaScript API

    • Potentially breaking bug fix: Custom functions in both the modern and legacy API now properly reject signatures with whitespace between the function name and parentheses.

    • Custom functions in the legacy API now allow signatures with whitespace before the function name, to match a bug in Node Sass.

    Dart API

    • Potentially breaking bug fix: Callable.fromSignature() and AsyncCallable.fromSignature() now reject signatures with whitespace between the function name and parentheses.

    See the full changelog for changes in earlier releases.

    Dart Sass 1.56.2

    To install Sass 1.56.2, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.

    Changes

    Embedded Sass

    See the full changelog for changes in earlier releases.

    Dart Sass 1.56.1

    To install Sass 1.56.1, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.

    ... (truncated)

    Changelog

    Sourced from sass's changelog.

    1.57.1

    • No user-visible changes.

    1.57.0

    • Add a split($string, $separator, $limit: null) function to sass:string that splits a string into separate substrings based on a separator string.

    JavaScript API

    • Potentially breaking bug fix: Custom functions in both the modern and legacy API now properly reject signatures with whitespace between the function name and parentheses.

    • Custom functions in the legacy API now allow signatures with whitespace before the function name, to match a bug in Node Sass.

    Dart API

    • Potentially breaking bug fix: Callable.fromSignature() and AsyncCallable.fromSignature() now reject signatures with whitespace between the function name and parentheses.

    1.56.2

    Embedded Sass

    1.56.1

    Embedded Sass

    • Importer results now validate that contents is actually a string and whether sourceMapUrl is an absolute URL.

    1.56.0

    • Potentially breaking change: To match the CSS spec, SassScript expressions beginning with not or ( are no longer supported at the beginning of parenthesized sections of media queries. For example,

      @media (width >= 500px) and (not (grid))
      

      will now be emitted unchanged, instead of producing

    ... (truncated)

    Commits
    • 5522c17 Run "dart pub upgrade" rather than "pub upgrade" (#1851)
    • 4349769 Create dependabot.yml (#1849)
    • 100f76f Implement string.split() (#1839)
    • 236b83f Delete dev dependency on Sass when releasing the embedded compiler (#1850)
    • 641d8e1 Be strict about whitespace in custom functions (#1848)
    • e87176a Add a factory method for creating host callable (#1829)
    • 790eb8a Update CHANGELOG for embedded-host-node fixes (#1828)
    • f3293db JS API: Validate that importer result 'contents' is a string and improve Ar...
    • 00c3517 Make `cloneCss() clone modules that transitively contain CSS (#1824)
    • 44d6bb6 Add full support for Media Queries 4 (#1822)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • Bump jquery from 3.6.0 to 3.6.3

    Bump jquery from 3.6.0 to 3.6.3

    Bumps jquery from 3.6.0 to 3.6.3.

    Release notes

    Sourced from jquery's releases.

    jQuery supports CSS.supports in jQuery 3.6.3

    https://blog.jquery.com/2022/12/20/jquery-3-6-3-released-a-quick-selector-fix/

    jQuery 3.6.2 :has arrived!

    https://blog.jquery.com/2022/12/13/jquery-3-6-2-released/

    jQuery 3.6.1 Maintenance Release

    https://blog.jquery.com/2022/08/26/jquery-3-6-1-maintenance-release/

    Commits
    • 6786a17 3.6.3
    • 81d5bd1 Build: remove stale Insight package from custom builds
    • 8989500 Selector: Update Sizzle from 2.3.8 to 2.3.9
    • 2c5b47c Build: Updating the 3.x-stable version to 3.6.3-pre.
    • 2215119 Release: update authors
    • 0d9fae4 Build: Limit permissions for GitHub workflows
    • f4809f9 Build: Test on Node.js 18 & 19, stop testing on Node 12
    • 5318e31 Selector:Manipulation: Fix DOM manip within template contents
    • a1b7ae3 Selector: Update Sizzle from 2.3.7 to 2.3.8
    • 28241b7 Build: Bump actions/setup-node from 3.5.0 to 3.5.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
Releases(3.2)
Owner
Oscar
Flexible e-commerce for Django
Oscar
A Django app to accept payments from various payment processors via Pluggable backends.

Django-Merchant Django-Merchant is a django application that enables you to use multiple payment processors from a single API. Gateways Following gate

Agiliq 997 Dec 24, 2022
Ecommerce app using Django, Rest API and ElasticSearch

e-commerce-app Ecommerce app using Django, Rest API, Docker and ElasticSearch Sort pipfile pipfile-sort Runserver with Werkzeug (django-extensions) .

Nhat Tai NGUYEN 1 Jan 31, 2022
A Django e-commerce website

BRIKKHO.com E-commerce website created with Django Run It: Clone the project or download as zip: $ git clone https://github.com/FahadulShadhin/brikkho

Shadhin 1 Dec 17, 2021
A modular, high performance, headless e-commerce platform built with Python, GraphQL, Django, and React.

Saleor Commerce Customer-centric e-commerce on a modern stack A headless, GraphQL commerce platform delivering ultra-fast, dynamic, personalized shopp

Saleor Commerce 17.7k Jan 01, 2023
A modular, high performance, headless e-commerce platform built with Python, GraphQL, Django, and React.

Saleor Commerce Customer-centric e-commerce on a modern stack A headless, GraphQL-first e-commerce platform delivering ultra-fast, dynamic, personaliz

Mirumee Labs 17.7k Dec 31, 2022
Display money format and its filthy currencies, for all money lovers out there.

Python Currencies Display money format and its filthy currencies, for all money lovers out there. Installation currencies is available on PyPi http://

Alireza Savand 64 Dec 28, 2022
Python money class with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.

Python Money Money class with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution. This is version 1.4.0-dev. De

Carlos Palol 214 Dec 22, 2022
Portfolio and E-commerce site built on Python-Django and Stripe checkout

StripeMe Introduction Stripe Me is an e-commerce and portfolio website offering communication services, including web-development, graphic design and

3 Jul 05, 2022
EasyShop User Interface - a shopping program we created for people who want to buy specific cloth wear

EasyShop-User-Interface Welcome to the EasyShop User Interface! This program fetches images from urls as per choices of clothes made by you and displa

Adit Sinha 1 Apr 23, 2022
Ecommerce for Mezzanine

Created by Stephen McDonald Overview Cartridge is a shopping cart application built using the Django framework. It is BSD licensed, and designed to pr

Stephen McDonald 680 Jan 03, 2023
E-Commerce Platform

Shuup Shuup is an Open Source E-Commerce Platform based on Django and Python. https://shuup.com/ Copyright Copyright (c) 2012-2021 by Shuup Commerce I

Shuup 2k Dec 30, 2022
A web application to search for input products across several supermarkets' e-commerce to return price, detail of products running on Python.

Price Checker A web application to search for input products across several supermarkets' e-commerce to return price, detail of products. Requirements

3 Jun 28, 2022
A Django based shop system

django-SHOP Django-SHOP aims to be a the easy, fun and fast e-commerce counterpart to django-CMS. Here you can find the full documentation for django-

Awesto 2.9k Jan 02, 2023
Foreign exchange rates, Bitcoin price index and currency conversion using ratesapi.io

forex-python Forex Python is a Free Foreign exchange rates and currency conversion. Note: Install latest forex-python==1.1 to avoid RatesNotAvailableE

MicroPyramid 540 Jan 05, 2023
PVE with tcaledger app for payments and simulation of payment requests

tcaledger PVE with tcaledger app for payments and simulation of payment requests. The purpose of this API is to empower users to accept cryptocurrenci

3 Jan 29, 2022
An Unofficial Alipay API for Python

An Unofficial Alipay API for Python Overview An Unofficial Alipay API for Python, It Contain these API: Generate direct payment url Generate partner t

Eric Lo 321 Dec 24, 2022
Storefront - An E-commerce StoreFront Application Built With Python

An E-commerce StoreFront Application A very robust storefront project. This is a

Fachii Felix Zasha 1 Apr 04, 2022
Fully functional ecommerce website with user and guest checkout capabilities and Paypal payment integration.

ecommerce_website Fully functional ecommerce website with user and guest checkout capabilities and Paypal payment integration. pip install django pyth

2 Jan 05, 2022
imager is a modern ecommerce & social network platform that helps users to find the most matching products

imager is a modern ecommerce & social network platform that helps users to find the most matching products. Users can follow their favourite brands and to be aware of friends' actions. If you have se

Sardor 1 Jan 11, 2022
Domain-driven e-commerce for Django

Domain-driven e-commerce for Django Oscar is an e-commerce framework for Django designed for building domain-driven sites. It is structured such that

Oscar 5.6k Dec 30, 2022