DjaoDjin-SaaS ============= [](https://djaodjin-saas.readthedocs.io/en/latest/?badge=latest) [](https://badge.fury.io/py/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](https://github.com/djaodjin/djaoapp/). Full documentation for the project is available at [Read-the-Docs](http://djaodjin-saas.readthedocs.org/) 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](http://djaodjin-saas.readthedocs.io/en/latest/backends.html))
and Django secret key into a credentials file. Example with
[Stripe](https://stripe.com/):
$ 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](https://djaodjin-saas.readthedocs.io/en/latest/getting-started.html#setting-up-a-software-as-a-service-site).
$ 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