A django app with all the tools required to make a Shopify app
Project description
django-shopify-app
Add the app in settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'shopify_app',
'shops',
]
Add the required configurations in settings.py
SHOPIFY_API_KEY = config('SHOPIFY_API_KEY')
SHOPIFY_API_SECRET = config('SHOPIFY_API_SECRET')
SHOPIFY_APP_SCOPES = [
'read_products',
'read_orders',
]
SHOPIFY_WEBHOOK_TOPICS = [
'products/update',
'app/uninstalled',
]
SHOPIFY_SHOP_MODEL = 'shops.Shop'
SHOPIFY_WEBHOOK_HOST = 'https://moship.ngrok.io'
SHOPIFY_APP_HOST = 'https://moship.ngrok.io'
SHOPIFY_WEBHOOK_CALLBACK = 'shops.webhooks.webhook_entry'
SHOPIFY_GDPR_WEBHOOK_CALLBACK = 'shops.webhooks.webhook_entry'
Authorization
The package supports two authorization flows: token exchange (recommended for embedded apps) and authorization code grant (legacy / non-embedded apps).
Token exchange (recommended)
Token exchange eliminates OAuth redirects. The backend exchanges the session token from App Bridge for an access token via a server-side POST to Shopify. No page reloads or flicker.
Scopes are managed via shopify.app.toml and deployed with Shopify CLI (shopify app deploy). Shopify handles installation and scope updates automatically.
Add to settings.py:
SHOPIFY_TOKEN_EXCHANGE = True # Enable token exchange
SHOPIFY_DASHBOARD_PATH = '/dashboard' # Where to redirect from app root
Set up your URLs:
from django.urls import path, include
from shopify_app.views import AppRootView
urlpatterns = [
path('', AppRootView.as_view()),
path('shopify/', include('shopify_app.urls')),
# your dashboard urls...
]
When a merchant opens your app, AppRootView redirects to the dashboard. The first API request from the dashboard triggers token exchange automatically via ShopSessionMixin / shop_session, storing the access token for subsequent requests.
Authorization code grant (legacy)
For non-embedded apps or apps that don't use Shopify managed installation.
from django.urls import path
from shopify_app.views import AppRootView, EndTokenRequestView
app_name = 'my_shopify_app'
urlpatterns = [
path(
'',
AppRootView.as_view(
redirect_path_name='my_shopify_app:end-token-request',
),
),
path(
'confirm/',
EndTokenRequestView.as_view(
redirect_path_name='embed_admin:dashboard',
),
name='end-token-request'
),
]
With SHOPIFY_TOKEN_EXCHANGE = False (default), AppRootView falls back to the OAuth authorization code grant flow.
Webhook URLs
from django.urls import path, include
urlpatterns = [
path('shopify/', include('shopify_app.urls')),
]
ShopSessionMixin
A mixin that authenticates requests against a valid Shopify shop session (JWT). Use it with any APIView or DRF generic view:
from rest_framework.views import APIView
from shopify_app.mixins import ShopSessionMixin
class MyView(ShopSessionMixin, APIView):
def get(self, request, *args, **kwargs):
shop = request.shop
...
Staff bypass
Staff users can skip Shopify JWT validation if they have a shop associated with their user model. Enable it globally in settings:
SHOPIFY_STAFF_BYPASS = True # Default: False
SHOPIFY_STAFF_SHOP_ATTR = 'admin_shop' # Default: 'admin_shop'
Or per-view:
class MyView(ShopSessionMixin, APIView):
allow_staff_bypass = True # Overrides the global setting
When enabled, if the request user is authenticated, is staff, and has a truthy value on the configured attribute (admin_shop by default), the mixin sets request.shop from that attribute and skips JWT validation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_shopify_app-2.2.0.tar.gz.
File metadata
- Download URL: django_shopify_app-2.2.0.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1db26beaac9883b29c8a1110887fc95b68751494c4a49d7a56f7d63ec58f2c7e
|
|
| MD5 |
f829d7ea99baa48ea79897a8efac0cc0
|
|
| BLAKE2b-256 |
187ba319a63d90e59081373aab204b8b984fb87a40f9e2216a0225e1e1b04f25
|
File details
Details for the file django_shopify_app-2.2.0-py3-none-any.whl.
File metadata
- Download URL: django_shopify_app-2.2.0-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c155feab23739f086578c963bc2255e6904d71be3b5e71b0061e693643bfddba
|
|
| MD5 |
12ae5ffe849d6cbe4c4e98b8b5a1abf3
|
|
| BLAKE2b-256 |
51e7c3a763c1afbad186f4aed2dbd4ac5272c20048d4c9fd4b7c37379a6d8843
|