Add your description here
Project description
Django Envtools
A Django package that enhances the environs library by adding management commands to simplify environment variable handling.
Management Commands
create_env_file: Creates a new.envfile with default values, help text, and initial value hooks for environment variables.diff_env_file: Displays differences between your.envfile and the environment variables in your Django settings.
Installation
Install via uv or pip:
uv add django-envtools
# or
pip install django-envtools
Usage
First, add django_envtools to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
...
'django_envtools',
]
Then, update your settings to use the Env class to read environment variables. Django Envtools adds three keyword
arguments that environs doesn't have: help_text, initial_func, and initial.
help_text: Provides help text for each environment variable.initial_func: A callable or a string path to a callable that generates an initial value when runing thecreate_env_filemanagement command.initial: Set an initial value for environment variable when running thecreate_env_filemanagement command. Ifinitial_funcis provided, this value will be ignored.
For example, if you have the following in your settings.py:
from pathlib import Path
from django_envtools import Env
BASE_DIR = Path(__file__).resolve().parent.parent
# Initialize environs and load environment variables from .env file
env = Env()
env.read_env(BASE_DIR / ".env")
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env.str(
"SECRET_KEY",
initial_func="django.core.management.utils.get_random_secret_key",
help_text="Django's secret key, see https://docs.djangoproject.com/en/dev/ref/settings/#secret-key for more information",
)
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env.bool("DEBUG", default=False, initial="on", help_text="Set to `on` to enable debugging")
ALLOWED_HOSTS = env.list(
"ALLOWED_HOSTS",
default=[],
help_text="List of allowed hosts (e.g., `127.0.0.1,example.com`), see https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for more information",
)
DATABASES = {
"default": env.dj_db_url(
"DATABASE_URL",
default="sqlite:///db.sqlite3",
help_text="Database URL, see https://github.com/jazzband/dj-database-url for more information",
)
}
# See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL
email = env.dj_email_url(
"EMAIL_URL",
default="smtp://skroob@planetspaceball.com:12345@smtp.planetspaceball.com:587/?ssl=True&_default_from_email=President%20Skroob%20%3Cskroob@planetspaceball.com%3E",
help_text="See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL",
)
DEFAULT_FROM_EMAIL = email["DEFAULT_FROM_EMAIL"]
EMAIL_HOST = email["EMAIL_HOST"]
EMAIL_PORT = email["EMAIL_PORT"]
EMAIL_HOST_PASSWORD = email["EMAIL_HOST_PASSWORD"]
EMAIL_HOST_USER = email["EMAIL_HOST_USER"]
EMAIL_USE_TLS = email["EMAIL_USE_TLS"]
After setting up, you can run the management command ./manage.py create_env_file to generate a .env file with the
following content:
# This is an initial .env file generated on 2024-10-31T19:21:56.174711+00:00. Any environment variable with a default
# can be safely removed or commented out. Any variable without a default must be set.
# Django's secret key, see https://docs.djangoproject.com/en/dev/ref/settings/#secret-key for more information
# type: str
SECRET_KEY=redacted-secret-key
# Set to `on` to enable debugging
# type: bool
# default: False
# DEBUG=
# List of allowed hosts (e.g., `127.0.0.1,example.com`), see https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for more information
# type: list
# default: []
# ALLOWED_HOSTS=
# Database URL, see https://github.com/jazzband/dj-database-url for more information
# type: dj_db_url
# default: sqlite:///db.sqlite3
# DATABASE_URL=
# See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL
# type: dj_email_url
# default: smtp://skroob@planetspaceball.com:12345@smtp.planetspaceball.com:587/?ssl=True&_default_from_email=President%20Skroob%20%3Cskroob@planetspaceball.com%3E
# EMAIL_URL=
As the project grows, you can run ./manage.py diff_env_file to identify differences between your .env file and
settings.py, helping you spot missing or orphaned environment variables.
An example output might look like:
Environment variables missing in .env file:
- ALLOWED_HOSTS
- DEBUG
Environment variables missing in .env file with default values:
- DATABASE_URL
Environment variables in .env file that are not defined in your Django settings:
- FOO
- BAR
Contributing
Contributions are welcome! Please open an issue or submit a pull request. If you have any questions, feel free to reach out.
License
This project is licensed under the MIT License.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_envtools-0.2.0.tar.gz.
File metadata
- Download URL: django_envtools-0.2.0.tar.gz
- Upload date:
- Size: 33.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ae85797f34856f8b0da004fc9c6ee6e53d262f2f04ab8482fc8d1c97e52a45c
|
|
| MD5 |
9d79de2e121786ff484eb42b0f9b7644
|
|
| BLAKE2b-256 |
4f733c64364d62e692b13fd758ead7e83dc8a5f97db2364e5d20f571b3b561bc
|
File details
Details for the file django_envtools-0.2.0-py3-none-any.whl.
File metadata
- Download URL: django_envtools-0.2.0-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b26d0834d00ec4cf8da810d62bb12750c28325b09ad1c570197ed33a7cddcebe
|
|
| MD5 |
182bc54c79f10f8403271e96f080e2d8
|
|
| BLAKE2b-256 |
9c529a1371b0eb470ad13860698486c01d830aefd948d47119bb7c2676d3fd21
|