Package: dj-paddle
Django + Paddle Made Easy(this project is heavily inspired bydj-stripe)Introductiondj-paddle implements Paddle models (currently Subscription only), for Django.
Set up your webhook and start receiving model updates.
You will then have a copy of all Paddle subscriptions available in Django, no API traffic required!The full documentation is available athttps://dj-paddle.readthedocs.io.FeaturesDjango Signals for all incoming webhook events from paddleSubscriptionsRequirementsDjango >= 2.1Python >= 3.5QuickstartInstall dj-paddle:pipinstalldj-paddleAdddjpaddleto yourINSTALLED_APPS:INSTALLED_APPS=(..."djpaddle",...)Add to urls.py:path("paddle/",include("djpaddle.urls",namespace="djpaddle")),Tell paddle about the webhook (paddle webhook docs can be foundhere) using the full URL of your endpoint from the urls.py step above (e.g.https://example.com/paddle/webhook/).Add your paddle keys and set the operating mode:# can be found at https://vendors.paddle.com/authenticationDJPADDLE_VENDOR_ID='<your-vendor-id>'# create one at https://vendors.paddle.com/authenticationDJPADDLE_API_KEY='<your-api-key>'# can be found at https://vendors.paddle.com/public-keyDJPADDLE_PUBLIC_KEY='<your-public-key>'djpaddle includes avendor_idtemplate context processor which adds your vendor ID asDJPADDLE_VENDOR_IDto each template context:TEMPLATES=[{...'OPTIONS':{...'context_processors':[...'djpaddle.context_processors.vendor_id',...]}}Run the commands:python manage.py migrate

# fetches all subscription plans from paddle
python manage.py djpaddle_sync_plans_from_paddlePaddle CheckoutNext to setup aPaddleJS checkout pageFirst load in PaddleJS and initialise it by including the dj-paddle PaddleJS template in your own template to load PaddleJS:{%include"djpaddle_paddlejs.html"%}Next add a Paddle product or subscription plan into the page context. Below is an example of how to do this using a class based view whereplan_idis passed through as a value from the URL:fromdjango.confimportsettingsfromdjango.views.genericimportTemplateViewfromdjpaddle.modelsimportPlanclassCheckout(TemplateView):template_name='checkout.html'defget_context_data(self,**kwargs):context=super().get_context_data(**kwargs)context['paddle_plan']=Plan.objects.get(pk=kwargs['plan_id'])# If you have not added 'djpaddle.context_processors.vendor_id' as a template context processorscontext['DJPADDLE_VENDOR_ID']=settings.DJPADDLE_VENDOR_IDreturncontextFinally put aBuy Now!button for the plan subscription you added to the context:<a href="#!" class="paddle_button" data-product="{{paddle_plan.id}}">Buy Now!</a>You can pass data to Paddle JS by add data attributes to the button. For example to set the users email you can use thedata-emailattribute:<a href="#!" class="paddle_button" data-product="{{paddle_plan.id}}" data-email="{{user.email}}" >Buy Now!</a>A full list of parameters can be found on thePaddleJS parameters pageFor more information about options on what to do after a successful checkout please see ourCheckout success documentationSubscription modelYou can override the model that subscriptions are attached to using theDJPADDLE_SUBSCRIBER_MODELsetting. This setting must use the string model reference in the style ‘app_label.ModelName’.The model chosen must have anemailfield.# Defaults to AUTH_USER_MODELDJPADDLE_SUBSCRIBER_MODEL='myapp.MyModel'Warning: To use this setting you must have already created and ran the initial migration for the app/model before addingdjpaddingtoINSTALLED_APPS.Reporting Security IssuesPlease do not report security issues in public, but email the authors directly.