Django application for software-as-service and subscription businesses
Project description
DjaoDjin-SaaS
djaodjin-saas is a Django application that implements the logic to support subscription-based Software-as-a-Service businesses.
Major Features:
- Separate billing profiles and authenticated users
- Double entry book keeping ledger
- Flexible security framework
This project contains bare bone templates which are compatible with Django and Jinja2 template engines. To see djaodjin-saas in action as part of a full-fledged subscription-based session proxy, take a look at djaoapp.
Full documentation for the project is available at Read-the-Docs
Development
After cloning the repository, create a virtualenv environment and install the prerequisites:
$ python -m venv .venv
$ source .venv/bin/activate
$ pip install -r testsite/requirements.txt
# Installs Javascript prerequisites to run in the browser
$ make vendor-assets-prerequisites
To use the testsite, you will need to add the payment processor keys (see Processor Backends) and Django secret key into a credentials file. Example with Stripe:
$ cat ./credentials
SECRET_KEY = "enough_random_data"
STRIPE_PUB_KEY = "your_stripe_public_api_key"
STRIPE_PRIV_KEY = "your_stripe_private_api_key"
It remains to create and populate the database with required objects.
$ python ./manage.py migrate --run-syncdb --noinput
$ python ./manage.py loaddata testsite/fixtures/initial_data.json
$ python ./manage.py createsuperuser
You can further generate a set of dummy data data to populate the site.
$ python ./manage.py load_test_transactions
Side note: If create your own fixtures file (ex: testsite/fixtures/test_data.json) and attempt to load them with a Django version before 2 while the Python executable was linked with a SQLite version after 3.25, you might stumble upon the well-known SQLite 3.26 breaks database migration ForeignKey constraint, leaving <table_name>__old in db schema bug. Your best bet is to use Django2+ or delete the migrations/ directory.
If all is well then, you are ready to run the server and browse the testsite.
$ python manage.py runserver
# Browse http://localhost:8000/
Implementation Notes
The latest versions of django-restframework (>=3.0) implement paginators
disconnected from parameters in views (i.e. no more paginate_by). You will
thus need to define PAGE_SIZE
in your settings.py
$ diff testsite/settings.py
+REST_FRAMEWORK = {
+ 'PAGE_SIZE': 25,
+ 'DEFAULT_PAGINATION_CLASS':
+ 'rest_framework.pagination.PageNumberPagination',
+}
This Django App does not send notification e-mails itself. All major updates that would result in a e-mail sent trigger signals though. It is straightforward to send e-mails on a signal trigger in the main Django project. We provide sample e-mail templates here in the saas/templates/notification/ directory.
Release Notes
Tested with
- Python: 3.7, Django: 3.2 (LTS)
- Python: 3.10, Django: 4.2 (latest)
- Python: 2.7, Django: 1.11 (legacy) - use testsite/requirements-legacy.txt
0.20.5
- fixes role request while a role grant is pending
- saves meta information in role
- repares profile/user relationship whenever possible
- shows discount type correctly in template
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
File details
Details for the file djaodjin_saas-0.20.5.tar.gz
.
File metadata
- Download URL: djaodjin_saas-0.20.5.tar.gz
- Upload date:
- Size: 322.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 531c8374d55b1b75f5f0f7178997656b6e194d8a4fa17fe38b97747582c5e64d |
|
MD5 | 6951bc7dc73fc0979c88b2cbce209303 |
|
BLAKE2b-256 | d4b329a0979e01c4ae8dd1b2b27cfb8392c7a47e08bef30f51c9ab69c26ddcd1 |
File details
Details for the file djaodjin_saas-0.20.5-py3-none-any.whl
.
File metadata
- Download URL: djaodjin_saas-0.20.5-py3-none-any.whl
- Upload date:
- Size: 467.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b4eda8942f85608d4d50bc905c2e990ece594076adca3f809bd02929fd4be9cd |
|
MD5 | 340cd9be395becf4a47d3dd1a8da0ffc |
|
BLAKE2b-256 | 2c4adfa14a310cb5bd11896dc34f0b79065a336b3a9c4f4d3374fbe78ebc1733 |