{ "info": { "author": "Stefan Kr\u00f6ner", "author_email": "sk@ubergrape.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "django-abo\n==========\n\nRecurring Payment / Subscription Handling for Django, supporting different payment gateways\n\n\n**Currently django-abo is in alpha/beta phase, please use with caution!**\n\n## Contribute\n\nIf you have a good idea or a specific problem, let us know! We'd love to get some feedback and we need more backends.\n\nIf you see a bug or want to contribute code in any way, please create a pull request on GitHub.\n\nIf you want to discuss changes (without comitting code), please create an issue on GitHub.\n\n## Supported Backends\n\n* [Paymill](https://www.paymill.com/)\n\n\n## Installation\n\n```bash\npip install django-abo\n```\n\n## Definitions\n\n* *Plan* = something a customer can subscribe to, for example: \"Premium Plan, 10$/month\"\n* *Subscription* = an actual subscription from a customer to a plan\n\n## Usage\n\n### 1. Setup settings\n\nAdd `abo` to your `INSTALLED_APPS`:\n```python\nINSTALLED_APPS = (\n # ...\n 'abo',\n)\n```\n\nAdd these lines to your settings:\n\n```python\nABO_BACKENDS = ('abo.backends.paymill', )\nINSTALLED_APPS += ABO_BACKENDS\n\nABO_DEFAULT_BACKEND = 'abo.backends.paymill'\n\nABO_BACKENDS_SETTINGS = {\n 'abo.backends.paymill': {\n 'PAYMILL_PUBLIC_KEY': 'your public key',\n 'PAYMILL_PRIVATE_KEY': 'your private key',\n 'PAYMILL_WEBHOOK_HOST': '' # hint: use ngrok.com for testing\n }\n}\n```\n\n### 2. Setup URLs\n\nInclude the payment URLs in your `urls.py`:\n\n```python\nurlpatterns = patterns('',\n # ...\n url(r'payment/^', include('abo.urls')),\n)\n```\n\nNow, open http://localhost:8000/payment/subscribe/\n\n### 3. Optional: Custom templates\n\n*django-abo* comes with it's own templates so you don't have to start from scratch.\n\nYou can override backend specific templates and generic templates.\n\n1. Just create a `abo` subdirectory in your own templates directory and put your own templates there.\n1. Make sure they have the same filename as the original ones.\n\nFor example, start with [subscription_success.html](https://github.com/ubergrape/django-abo/blob/master/abo/templates/subscription_success.html)\n\n### 4. Optional: Create your own plan and subscription models\n\n*django-abo* has two models you can easily extend. If you have ever swapped Django's default user model for your own, you'll see that the technique is very similar.\n\n#### Example custom Subscription model\n\nLet's say you have an `Organization` model in your `accounts` app and you want every `Subscription` object to belong to an organization.\n\n1. Create an app, if you don't have one already, that should contain your own `Subscription` model. For example `payment`\n\n1. Put your custom `Subscription` model in your `models.py`, subclassing `AbstractSubscription`.\n\n ```python\n from django.db import models\n\n from accounts.models import Organization\n from abo.models import AbstractSubscription\n\n class Organization(models.Model):\n name\n\n class Subscription(AbstractSubscription):\n organization = models.ForeignKey(Organization, null=True)\n ```\n\n1. Put this in your settings:\n\n ```python\n SUBSCRIPTION_MODEL = 'payment.Subscription'\n ```\n\n1. Create your own View for Paymill:\n\n ```python\n from abo.backends.paymill.views import PaymillView\n\n class CustomPaymillView(PaymillView):\n def form_valid(self, form):\n r = super(CustomPaymillView, self).form_valid(form)\n\n # Let's assume you have a middleware that puts the organization in request.\n self.subscription.organization = self.request.organization\n self.subscription.save()\n\n return r\n ```\n\n1. Put it in your urls.py\n\n ```python\n urlpatterns = patterns('',\n # ...\n url(r'^paymill/subscribe/$', CustomPaymillView.as_view(), name='abo-paymill-authorization'),\n url(r'^', include('abo.urls')),\n )\n\n#### Custom Plan model\n\nThe same works for the `Plan` model. If you created your custom `Plan` model, let *django-abo* know where it is:\n\n```python\nPLAN_MODEL = 'payment.Plan'\n```\n\n## Inspirations\n\n*django-abo* uses ideas from:\n\n* [Django user model](https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model) - same techniques are used to make my Plan and Subscription model swappable\n* [django-getpaid](https://github.com/cypreess/django-getpaid) - abstraction with backends etc.\n* [django-paymill](https://github.com/ulfur/django-paymill/) - mainly event/webhook handling\n* [django-stripe-payments](https://github.com/eldarion/django-stripe-payments) - some architecture details\n\nThanks to all contributers of theses projects\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ubergrape/django-abo", "keywords": null, "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "django-abo", "package_url": "https://pypi.org/project/django-abo/", "platform": "any", "project_url": "https://pypi.org/project/django-abo/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/ubergrape/django-abo" }, "release_url": "https://pypi.org/project/django-abo/0.1.4/", "requires_dist": null, "requires_python": null, "summary": "Recurring payment / subscription handling for Django, supporting different payment gateways", "version": "0.1.4" }, "last_serial": 1036362, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "9ba5f11a14a92348d5ed337d088cb70a", "sha256": "2b0e3b59c97fb2983464f9b8da807350481699c97fa131f372f9ccd976d4fe16" }, "downloads": -1, "filename": "django-abo-0.1.tar.gz", "has_sig": false, "md5_digest": "9ba5f11a14a92348d5ed337d088cb70a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16574, "upload_time": "2014-03-13T19:29:31", "url": "https://files.pythonhosted.org/packages/ff/b4/40454d5170700eb0a8994bd529492d78474ff755b773a4a15256b695b815/django-abo-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "40b131cfcaa9844d98c85ec90a4bf0da", "sha256": "97e8da7e329ddc83fa603cb53965730bb1bf30ab81e82fc0fa626a0a75e0ddc2" }, "downloads": -1, "filename": "django-abo-0.1.1.tar.gz", "has_sig": false, "md5_digest": "40b131cfcaa9844d98c85ec90a4bf0da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19377, "upload_time": "2014-03-13T19:38:16", "url": "https://files.pythonhosted.org/packages/39/e0/95b187387a28c7dee8c4771c7901dbd0593b6cd32d3623891875ab88d724/django-abo-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "e05492bd4d265539e27d433e1bd78d99", "sha256": "5d2247782600409d35b83216114ded6f68ec26e8009bb5a2e7900c67974d0c97" }, "downloads": -1, "filename": "django-abo-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e05492bd4d265539e27d433e1bd78d99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19376, "upload_time": "2014-03-13T19:40:50", "url": "https://files.pythonhosted.org/packages/95/95/b8e738bec9276b02ca43f6884c1c5a57a99695a17e9b285932c688f44c8e/django-abo-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "070d7f42dc9095fecbbee015182fdaf4", "sha256": "214389b47fc5f6051e16af597779f39fa2cbce28b699468129e1d8a34206829b" }, "downloads": -1, "filename": "django-abo-0.1.3.tar.gz", "has_sig": false, "md5_digest": "070d7f42dc9095fecbbee015182fdaf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19379, "upload_time": "2014-03-13T20:40:56", "url": "https://files.pythonhosted.org/packages/50/57/2d87f4ef393be51c1578b312168267387604a13e2b200d9ba281612b6cad/django-abo-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "0e45683fb663f46cbe24d38cd0389cd6", "sha256": "9c085e29cd5b2ec3f93976bced7c6bd76429a7e1383b9e24cbe0a83ab4fbc9af" }, "downloads": -1, "filename": "django-abo-0.1.4.tar.gz", "has_sig": false, "md5_digest": "0e45683fb663f46cbe24d38cd0389cd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21445, "upload_time": "2014-03-20T19:55:19", "url": "https://files.pythonhosted.org/packages/17/dd/3639fd612c31174ee4b0810d1599b511ebef45dd38b2e8156520dabfc77b/django-abo-0.1.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0e45683fb663f46cbe24d38cd0389cd6", "sha256": "9c085e29cd5b2ec3f93976bced7c6bd76429a7e1383b9e24cbe0a83ab4fbc9af" }, "downloads": -1, "filename": "django-abo-0.1.4.tar.gz", "has_sig": false, "md5_digest": "0e45683fb663f46cbe24d38cd0389cd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21445, "upload_time": "2014-03-20T19:55:19", "url": "https://files.pythonhosted.org/packages/17/dd/3639fd612c31174ee4b0810d1599b511ebef45dd38b2e8156520dabfc77b/django-abo-0.1.4.tar.gz" } ] }