README.rst
.. raw:: html
<h1 align="center">django-environ</h1>
<p align="center">
<a href="https://pypi.python.org/pypi/django-environ">
</a>
<a href="https://coveralls.io/github/joke2k/django-environ">
</a>
<a href="https://github.com/joke2k/django-environ/actions?workflow=CI">
</a>
<a href="https://opencollective.com/django-environ">
</a>
<a href="https://opencollective.com/django-environ">
</a>
<a href="https://saythanks.io/to/joke2k">
</a>
<a href="https://raw.githubusercontent.com/joke2k/django-environ/main/LICENSE.txt">
</a>
</p>
.. -teaser-begin-
django-environ is the Python package that allows you to use
Twelve-factor methodology <https://www.12factor.net/>_ to configure your
Django application with environment variables.
.. -teaser-end-
For that, it gives you an easy way to configure Django application using environment variables obtained from an environment file and provided by the OS:
.. -code-begin-
.. code-block:: python
import environ import os
env = environ.Env( # set casting, default value DEBUG=(bool, False) )
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
DEBUG = env('DEBUG')
SECRET_KEY = env('SECRET_KEY')
DATABASES = { # read os.environ['DATABASE_URL'] and raises # ImproperlyConfigured exception if not found # # The db() method is an alias for db_url(). 'default': env.db(),
# read os.environ['SQLITE_URL']
'extra': env.db_url(
'SQLITE_URL',
default='sqlite:////tmp/my-tmp-sqlite.db'
)
}
CACHES = { # Read os.environ['CACHE_URL'] and raises # ImproperlyConfigured exception if not found. # # The cache() method is an alias for cache_url(). 'default': env.cache(),
# read os.environ['REDIS_URL']
'redis': env.cache_url('REDIS_URL')
}
.. -overview-
The idea of this package is to unify a lot of packages that make the same stuff:
Take a string from os.environ, parse and cast it to some of useful python
typed variables. To do that and to use the 12factor <https://www.12factor.net/>_
approach, some connection strings are expressed as url, so this package can parse
it and return a urllib.parse.ParseResult. These strings from os.environ
are loaded from a .env file and filled in os.environ with setdefault
method, to avoid to overwrite the real environ.
A similar approach is used in
Two Scoops of Django <https://www.feldroy.com/two-scoops-of-django>_
book and explained in 12factor-django <https://dev.to/ale_jacques/django-drf-12-factor-app-with-examples-36jg>_
article.
Using django-environ you can stop to make a lot of unversioned
settings_*.py to configure your app.
See cookiecutter-django <https://github.com/cookiecutter/cookiecutter-django>_
for a concrete example on using with a django project.
Feature Support
os.environ with .env file variablesenviron.FileAwareEnv instead of environ.Env).. -project-information-
django-environ is released under the MIT / X11 License <https://choosealicense.com/licenses/mit/>__,
its documentation lives at Read the Docs <https://django-environ.readthedocs.io/en/latest/>,
the code on GitHub <https://github.com/joke2k/django-environ>,
and the latest release on PyPI <https://pypi.org/project/django-environ/>_.
It’s rigorously tested on Python 3.9+, and officially supports Django 2.2, 3.0, 3.1, 3.2, 4.0, 4.1, 4.2, 5.0, 5.1, 5.2, and 6.0.
If you'd like to contribute to django-environ you're most welcome!
.. -support-
Should you have any question, any remark, or if you find a bug, or if there is
something you can't do with the django-environ, please
open an issue <https://github.com/joke2k/django-environ>_.