I come from a PHP background, mostly using Laravel/Symfony. Recently, I started using Django, and I wanted to reproduce the way environmental variables are provided via a .env
file.
I wanted the .env
to load once I start the devserver without having to worry about it. Therefore I followed these steps:
Basic Project Setup For Demonstration
Make a basic app (Skip if Django is already set up)
To start, I created a virtual environment, set up a project.
mkdir myproject
cd myproject
python3 -m venv ./venv
echo vencv >> .gitignore
pip install Django
django-admin startproject mysite .
Install python-dotenv (Skip if already done)
pip install python-dotenv
Load .env
file
Loading environmental variables from a .env
file is simple with python-dotenv
:
from dotenv import load_dotenv
load_dotenv()
The question is though is WHERE to put this code. Loading the .env file every time can be tedious. Based on the setup I previously mentioned, my project created the following structure (some files omitted for simplicity):
myproject/
├── mysite/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── .env
As you can see, the mysite
directory is loaded as a module. All environmental variables are stored in the .env
file. To load them, I added the code to the mysite/__init__.py
file:
from dotenv import load_dotenv
load_dotenv()
This ensures that all environmental variables are loaded whenever I run:
python manage.py runserver
Drawbacks
The downside to this approach is that if I make any changes to the .env
file, I have to stop and restart the server to reload the environment variables.
Top comments (0)