Set Up Stripe on Django

Published on 23 Mar 2026 Tech Development
image
Photo by Annie Spratt on Unsplash
Disclaimer: This post was created with the assistance of Gemini and/or ChatGPT for informational purposes. While given a quick look over, readers are encouraged to verify key facts independently.

Integrating Stripe directly into Django gives you maximum control over your checkout flow. This guide walks you through a professional, "clean" setup using the Stripe CLI to handle local testing and webhooks.

Phase 1: Local Environment & CLI

1. Install Stripe CLI

On Windows (PowerShell):

winget install --id Stripe.StripeCLI

On macOS (Homebrew):

brew install stripe/stripe-cli/stripe

2. Pair Your Account

Link your local machine to your Stripe Sandbox:

stripe login

3. Install Python Library

Install the official Stripe library in your virtual environment:

pip install stripe python-dotenv

Phase 2: Django Configuration

4. Set Your API Keys

Add these to your .env file from the Stripe Dashboard:


STRIPE_PUBLIC_KEY=pk_test_...
STRIPE_SECRET_KEY=sk_test_...

5. Import Keys into Settings

Update your settings.py to load the environment variables:


import os
STRIPE_PUBLIC_KEY = os.getenv('STRIPE_PUBLIC_KEY')
STRIPE_SECRET_KEY = os.getenv('STRIPE_SECRET_KEY')
STRIPE_WEBHOOK_SECRET = os.getenv('STRIPE_WEBHOOK_SECRET')

6. Sync Your Catalog

Run your custom management command to pull Products and Prices from Stripe into your local database:

python manage.py sync_stripe_catalog

Phase 3: Webhook Setup

7. Start the Webhook Listener

Create a secure tunnel from Stripe to your local server:

stripe listen --forward-to localhost:8000/payments/webhook/

8. Update the Webhook Secret

Copy the "Signing Secret" (whsec_...) from the terminal output of the previous step and add it to your .env file.

9. Create the Webhook View

Build a Django view using @csrf_exempt that uses stripe.Webhook.construct_event to verify incoming signals.

Phase 4: Running & Testing

10. Launch the Servers

Keep the 'stripe listen' command running in one terminal, and start your Django server in another:

python manage.py runserver

11. Trigger a Clean Test Event

Test the connection by creating a real, deletable customer object instead of a guest record:

stripe trigger customer.created

12. Final Verification

Check your listener terminal for a "200 OK" response. This confirms your tunnel, secret, and Django view logic are all working together.

Comments