Bird
Raised Fist0
Djangoframework~20 mins

Environment-based settings in Django - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

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
Challenge - 5 Problems
🎖️
Environment Settings Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this Django settings code snippet?
Given the following Django settings snippet that uses environment variables, what will be the value of DEBUG if the environment variable DJANGO_DEBUG is not set?
Django
import os

DEBUG = os.getenv('DJANGO_DEBUG', 'False') == 'True'
AFalse
BNone
CRaises KeyError
DTrue
Attempts:
2 left
💡 Hint
Remember that os.getenv returns the default value if the environment variable is missing.
📝 Syntax
intermediate
2:00remaining
Which option correctly loads a secret key from environment variables in Django settings?
Select the option that correctly assigns the SECRET_KEY from an environment variable named DJANGO_SECRET_KEY and raises an error if it is missing.
ASECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
BSECRET_KEY = os.environ['DJANGO_SECRET_KEY']
CSECRET_KEY = os.getenv('DJANGO_SECRET_KEY', '')
DSECRET_KEY = os.getenv('DJANGO_SECRET_KEY') or raise ValueError('Missing key')
Attempts:
2 left
💡 Hint
Using os.environ with square brackets raises an error if the variable is missing.
state_output
advanced
2:00remaining
What is the value of DATABASES['default']['PORT'] after running this Django settings code?
Consider this snippet in Django settings.py. What will be the port value used by the database configuration?
Django
import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('DB_NAME', 'mydb'),
        'USER': os.getenv('DB_USER', 'user'),
        'PASSWORD': os.getenv('DB_PASS', 'pass'),
        'HOST': os.getenv('DB_HOST', 'localhost'),
        'PORT': int(os.getenv('DB_PORT', '5432'))
    }
}
A5432
BNone
CRaises ValueError
D0
Attempts:
2 left
💡 Hint
Check the default value and the type conversion used.
🔧 Debug
advanced
2:00remaining
Which option causes a runtime error when loading environment-based settings?
Given this Django settings snippet, which option will cause a runtime error when the environment variable ALLOWED_HOSTS is not set?
Django
import os

ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS').split(',')
AALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '').split(',')
BALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS').split(',') if os.environ.get('ALLOWED_HOSTS') else []
CALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '').split(',')
DALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS').split(',')
Attempts:
2 left
💡 Hint
What happens if os.getenv returns None and you call split() on it?
🧠 Conceptual
expert
3:00remaining
Which approach best ensures secure environment-based settings in Django for production?
You want to keep sensitive settings like SECRET_KEY and database credentials secure and configurable per environment. Which approach below is the best practice?
AStore secrets in a JSON file committed to the repo and read it in settings.py
BHardcode all secrets in settings.py and use gitignore to exclude it from version control
CUse environment variables and a secrets manager or vault in production, with .env files only for local development
DUse environment variables accessed via os.environ and load them with a .env file in development only
Attempts:
2 left
💡 Hint
Consider security and flexibility for different environments.

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
B. To make the app run faster
C. To reduce the number of files in the project
D. To avoid using databases

Solution

  1. Step 1: Understand environment-based settings purpose

    They help keep sensitive information like passwords and keys out of the codebase.
  2. Step 2: Identify the main benefit

    This improves security and allows easy changes per environment without code edits.
  3. Final Answer:

    To keep sensitive data like passwords out of the code -> Option A
  4. Quick Check:

    Security = Keep secrets out [OK]
Hint: Environment settings protect secrets outside code [OK]
Common Mistakes:
  • Thinking environment settings speed up the app
  • Confusing environment settings with file count
  • 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

  1. Step 1: Recall correct function to read environment variables

    Use os.getenv('VAR_NAME') to safely get environment variables.
  2. Step 2: Check syntax correctness

    SECRET_KEY = os.getenv('SECRET_KEY') uses correct syntax without extra parentheses or wrong function names.
  3. Final Answer:

    SECRET_KEY = os.getenv('SECRET_KEY') -> Option C
  4. 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

  1. Step 1: Understand default value in os.getenv()

    If DEBUG is not set, os.getenv('DEBUG', 'False') returns string 'False'.
  2. Step 2: Evaluate comparison to string 'True'

    'False' == 'True' is False, so DEBUG becomes False (boolean).
  3. Final Answer:

    False -> Option D
  4. 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

  1. Step 1: Understand os.getenv returns strings

    Environment variables are strings, so os.getenv('DEBUG', False) returns string 'False' if set.
  2. Step 2: Recognize string 'False' is truthy in Python

    Non-empty strings are True in boolean context, so DEBUG is always True.
  3. Final Answer:

    os.getenv returns strings, so DEBUG is the string 'False', which is truthy -> Option A
  4. 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

  1. Step 1: Use environment variable to detect environment

    Check os.getenv('ENV') to decide if running in production or development.
  2. Step 2: Load DB settings conditionally

    Load production DB settings if ENV is 'production', else load development settings.
  3. Final Answer:

    Use os.getenv('ENV') == 'production' to load production DB settings, else development settings -> Option B
  4. Quick Check:

    Conditional DB config based on ENV variable [OK]
Hint: Use ENV variable to switch settings safely [OK]
Common Mistakes:
  • Hardcoding production settings in code
  • Not providing default for os.environ access
  • Ignoring environment variables for config