Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Environment-based settings in Django
📖 Scenario: You are building a Django web application that needs to use different settings depending on whether it is running in development or production. This helps keep sensitive information safe and makes your app flexible.
🎯 Goal: Create a Django settings setup that loads a secret key and debug mode from environment variables. This way, the app behaves differently in development and production without changing the code.
📋 What You'll Learn
Create a SECRET_KEY variable in settings.py that reads from environment variable DJANGO_SECRET_KEY
Create a DEBUG variable in settings.py that reads from environment variable DJANGO_DEBUG and converts it to a boolean
Set a default value for DEBUG as False if the environment variable is not set
Use Python's os module to access environment variables
💡 Why This Matters
🌍 Real World
Many Django projects use environment variables to keep sensitive data like secret keys and debug flags out of the codebase. This makes deployment safer and easier.
💼 Career
Understanding environment-based settings is essential for Django developers to build secure and flexible applications that work well in different environments.
Progress0 / 4 steps
1
Import the os module
In your settings.py file, import the os module to access environment variables.
Django
Hint
Use import os at the top of your settings.py file.
2
Create SECRET_KEY from environment variable
Create a variable called SECRET_KEY in settings.py that gets its value from the environment variable DJANGO_SECRET_KEY using os.environ.get().
Django
Hint
Use os.environ.get('DJANGO_SECRET_KEY') to read the secret key.
3
Create DEBUG variable from environment variable
Create a variable called DEBUG in settings.py that reads from the environment variable DJANGO_DEBUG. Convert the string value to a boolean by checking if it equals 'True'. If the environment variable is not set, default DEBUG to False.
Django
Hint
Use os.environ.get('DJANGO_DEBUG', 'False') == 'True' to convert the string to boolean.
4
Complete environment-based settings setup
Ensure your settings.py file has the import os line, the SECRET_KEY variable reading from DJANGO_SECRET_KEY, and the DEBUG variable reading from DJANGO_DEBUG with a default of False and converted to boolean.
Django
Hint
Check that all three lines are present exactly as shown.
Practice
(1/5)
1. What is the main reason to use environment-based settings in a Django project?
easy
A. To keep sensitive data like passwords out of the code
Believing environment settings remove database use
2. Which of the following is the correct way to get an environment variable named SECRET_KEY in Django settings?
easy
A. SECRET_KEY = os.get('SECRET_KEY')
B. SECRET_KEY = os.environ['SECRET_KEY']()
C. SECRET_KEY = os.getenv('SECRET_KEY')
D. SECRET_KEY = getenv('SECRET_KEY')
Solution
Step 1: Recall correct function to read environment variables
Use os.getenv('VAR_NAME') to safely get environment variables.
Step 2: Check syntax correctness
SECRET_KEY = os.getenv('SECRET_KEY') uses correct syntax without extra parentheses or wrong function names.
Final Answer:
SECRET_KEY = os.getenv('SECRET_KEY') -> Option C
Quick Check:
Use os.getenv() for environment variables [OK]
Hint: Use os.getenv('VAR') to read environment variables [OK]
Common Mistakes:
Adding parentheses after os.environ['VAR']
Using non-existent os.get() function
Calling getenv() without os prefix
3. Given this code in settings.py:
import os
DEBUG = os.getenv('DEBUG', 'False') == 'True'
What will be the value of DEBUG if the environment variable DEBUG is not set?
medium
A. Raises an error
B. True
C. None
D. False
Solution
Step 1: Understand default value in os.getenv()
If DEBUG is not set, os.getenv('DEBUG', 'False') returns string 'False'.
Step 2: Evaluate comparison to string 'True'
'False' == 'True' is False, so DEBUG becomes False (boolean).
Final Answer:
False -> Option D
Quick Check:
Unset DEBUG defaults to 'False' string, so boolean False [OK]
Hint: Default string 'False' != 'True' means DEBUG is False [OK]
Common Mistakes:
Assuming default 'False' string converts to boolean True
Expecting None when variable is missing
Thinking code raises error if env var missing
4. You wrote this in settings.py:
import os
SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG = os.getenv('DEBUG', False)
But DEBUG is always True even when you set DEBUG=False in the environment. What is the problem?
medium
A. os.getenv returns strings, so DEBUG is the string 'False', which is truthy
B. os.getenv cannot read boolean environment variables
C. SECRET_KEY must be set before DEBUG
D. You must import dotenv to use os.getenv
Solution
Step 1: Understand os.getenv returns strings
Environment variables are strings, so os.getenv('DEBUG', False) returns string 'False' if set.
Step 2: Recognize string 'False' is truthy in Python
Non-empty strings are True in boolean context, so DEBUG is always True.
Final Answer:
os.getenv returns strings, so DEBUG is the string 'False', which is truthy -> Option A
Quick Check:
Env vars are strings; 'False' string is True in boolean [OK]
Hint: Remember env vars are strings, not booleans [OK]
Common Mistakes:
Assuming os.getenv returns boolean type
Thinking import order affects env var reading
Believing dotenv is required for os.getenv
5. You want to set different database settings for development and production using environment variables. Which approach correctly applies environment-based settings in settings.py?
hard
A. Use if os.environ['ENV'] == 'production' without default and catch exceptions
B. Use os.getenv('ENV') == 'production' to load production DB settings, else development settings
C. Set all DB settings to default values and never change them
D. Hardcode production DB settings and ignore environment variables
Solution
Step 1: Use environment variable to detect environment
Check os.getenv('ENV') to decide if running in production or development.
Step 2: Load DB settings conditionally
Load production DB settings if ENV is 'production', else load development settings.
Final Answer:
Use os.getenv('ENV') == 'production' to load production DB settings, else development settings -> Option B
Quick Check:
Conditional DB config based on ENV variable [OK]
Hint: Use ENV variable to switch settings safely [OK]