4. How to create a shipping backend

  • Shipping backends must be listed in settings.SHOP_SHIPPING_BACKENDS

4.1. Shop interface

While we could solve this by defining a superclass for all shipping backends, the better approach to plugins is to implement inversion-of-control, and let the backends hold a reference to the shop instead.

The reference interface for shipping backends is located at

class shop.shipping.api.ShippingAPI

4.2. Backend interface

The shipping backend should define the following interface for the shop to be able do to anything sensible with it:

4.2.1. Attributes

backend_name

The name of the backend (to be displayed to users)

url_namespace

“slug” to prepend to this backend’s URLs (acting as a namespace)

4.2.2. Methods

__init__(shop)

must accept a “shop” argument (to let the shop system inject a reference to it)

Parameters:shop – an instance of the shop
get_urls()

should return a list of URLs (similar to urlpatterns), to be added to the URL resolver when urls are loaded. These will be namespaced with the url_namespace attribute by the shop system, so it shouldn’t be done manually.

4.2.3. Security

In order to make your shipping backend compatible with the SHOP_FORCE_LOGIN setting please make sure to add the @shop_login_required decorator to any views that your backend provides. See How to secure your views for more information.