mirror of
https://github.com/jazzband/django-configurations.git
synced 2026-03-16 22:20:27 +00:00
As per [their blog post of the 27th April](https://blog.readthedocs.com/securing-subdomains/) ‘Securing subdomains’: > Starting today, Read the Docs will start hosting projects from subdomains on the domain readthedocs.io, instead of on readthedocs.org. This change addresses some security concerns around site cookies while hosting user generated data on the same domain as our dashboard. Test Plan: Manually visited all the links I’ve modified.
109 lines
3.2 KiB
ReStructuredText
109 lines
3.2 KiB
ReStructuredText
django-configurations
|
|
=====================
|
|
|
|
.. image:: https://travis-ci.org/jazzband/django-configurations.svg?branch=master
|
|
:alt: Build Status
|
|
:target: https://travis-ci.org/jazzband/django-configurations
|
|
|
|
.. image:: https://jazzband.co/static/img/badge.svg
|
|
:alt: Jazzband
|
|
:target: https://jazzband.co/
|
|
|
|
.. image:: https://codecov.io/github/jazzband/django-configurations/coverage.svg?branch=master
|
|
:alt: Codecov
|
|
:target: https://codecov.io/github/jazzband/django-configurations?branch=master
|
|
|
|
django-configurations eases Django project configuration by relying
|
|
on the composability of Python classes. It extends the notion of
|
|
Django's module based settings loading with well established
|
|
object oriented programming patterns.
|
|
|
|
Check out the `documentation`__ for more complete examples.
|
|
|
|
.. __: https://django-configurations.readthedocs.io/en/latest/
|
|
|
|
|
|
Quickstart
|
|
----------
|
|
|
|
Install django-configurations:
|
|
|
|
.. code-block:: console
|
|
|
|
pip install django-configurations
|
|
|
|
Then subclass the included ``configurations.Configuration`` class in your
|
|
project's **settings.py** or any other module you're using to store the
|
|
settings constants, e.g.:
|
|
|
|
.. code-block:: python
|
|
|
|
# mysite/settings.py
|
|
|
|
from configurations import Configuration
|
|
|
|
class Dev(Configuration):
|
|
DEBUG = True
|
|
|
|
Set the ``DJANGO_CONFIGURATION`` environment variable to the name of the class
|
|
you just created, e.g. in bash:
|
|
|
|
.. code-block:: console
|
|
|
|
export DJANGO_CONFIGURATION=Dev
|
|
|
|
and the ``DJANGO_SETTINGS_MODULE`` environment variable to the module
|
|
import path as usual, e.g. in bash:
|
|
|
|
.. code-block:: console
|
|
|
|
export DJANGO_SETTINGS_MODULE=mysite.settings
|
|
|
|
*Alternatively* supply the ``--configuration`` option when using Django
|
|
management commands along the lines of Django's default ``--settings``
|
|
command line option, e.g.::
|
|
|
|
python manage.py runserver --settings=mysite.settings --configuration=Dev
|
|
|
|
To enable Django to use your configuration you now have to modify your
|
|
**manage.py** or **wsgi.py** script to use django-configurations's versions
|
|
of the appropriate starter functions, e.g. a typical **manage.py** using
|
|
django-configurations would look like this:
|
|
|
|
.. code-block:: python
|
|
|
|
#!/usr/bin/env python
|
|
|
|
import os
|
|
import sys
|
|
|
|
if __name__ == "__main__":
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
|
|
os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')
|
|
|
|
from configurations.management import execute_from_command_line
|
|
|
|
execute_from_command_line(sys.argv)
|
|
|
|
Notice in line 10 we don't use the common tool
|
|
``django.core.management.execute_from_command_line`` but instead
|
|
``configurations.management.execute_from_command_line``.
|
|
|
|
The same applies to your **wsgi.py** file, e.g.:
|
|
|
|
.. code-block:: python
|
|
|
|
import os
|
|
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
|
|
os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')
|
|
|
|
from configurations.wsgi import get_wsgi_application
|
|
|
|
application = get_wsgi_application()
|
|
|
|
Here we don't use the default ``django.core.wsgi.get_wsgi_application``
|
|
function but instead ``configurations.wsgi.get_wsgi_application``.
|
|
|
|
That's it! You can now use your project with ``manage.py`` and your favorite
|
|
WSGI enabled server.
|