Bird
Raised Fist0
Flaskframework~10 mins

Environment variable management in Flask - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Environment variable management
Start Flask app
↓
Load .env file (optional)
↓
Read environment variables
↓
Use variables in app config
↓
Run app with config
↓
Access variables anywhere in code
↓
End
This flow shows how Flask loads environment variables, optionally from a .env file, then uses them in app configuration and code.
Execution Sample
Flask
from flask import Flask
import os

app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'default')
This code creates a Flask app and sets its SECRET_KEY config from an environment variable or a default.
Execution Table
StepActionEnvironment Variable AccessedValue RetrievedApp Config ChangeOutput/Result
1Start Flask appNoneN/ANoneApp instance created
2Load .env file if existsSECRET_KEYLoaded if presentNoneEnvironment variables available
3Read SECRET_KEY from environmentSECRET_KEYe.g. 'mysecret123'app.config['SECRET_KEY'] = 'mysecret123'Config set
4If SECRET_KEY missing, use defaultSECRET_KEYdefaultapp.config['SECRET_KEY'] = 'default'Config set with default
5Run app with configSECRET_KEYUsed internallyConfig used in appApp runs securely
6Access SECRET_KEY anywhereSECRET_KEYe.g. 'mysecret123'No changeApp uses key for sessions
7EndNoneN/ANoneApp stops
💡 Execution stops when the app ends or is stopped by user.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
SECRET_KEYNot setLoaded from .env or OS envValue from env or NoneDefault if NoneFinal value in app.config
Key Moments - 3 Insights
Why do we use os.getenv('SECRET_KEY', 'default') instead of just os.environ['SECRET_KEY']?
os.getenv returns None or a default if the variable is missing, preventing errors. os.environ['SECRET_KEY'] raises an error if SECRET_KEY is not set. See execution_table step 4 for default usage.
How does Flask know to load variables from a .env file?
Flask itself doesn't load .env files automatically. You use a package like python-dotenv to load .env variables into the environment before Flask reads them. See execution_table step 2.
Can environment variables change while the app is running?
No, environment variables are read once at startup. Changing them later won't affect the running app unless you reload or restart it. See variable_tracker final state.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what value does app.config['SECRET_KEY'] get if the environment variable is missing?
AAn error is raised
B'default'
CNone
D'mysecret123'
💡 Hint
Check step 4 in the execution_table where default is assigned if SECRET_KEY is missing.
At which step does the app read environment variables into its config?
AStep 5
BStep 1
CStep 3
DStep 7
💡 Hint
Look at the execution_table step where app.config['SECRET_KEY'] is set from environment.
If you add a new environment variable after the app starts, what happens?
AThe app ignores it until restarted
BThe app automatically uses the new variable
CThe app crashes
DThe variable is deleted
💡 Hint
Refer to key_moments about environment variables changing during runtime.
Concept Snapshot
Environment variables store config outside code.
Use os.getenv('VAR', default) to read safely.
Load .env files with python-dotenv before app start.
Set Flask config from env vars for security.
Env vars read once at startup, not live updated.
Full Transcript
This visual execution trace shows how Flask manages environment variables. First, the app starts and optionally loads variables from a .env file using a helper like python-dotenv. Then, it reads variables like SECRET_KEY using os.getenv, which safely returns a default if missing. The app config is set with these values and used during runtime. Environment variables do not change while the app runs, so any updates require a restart. This approach keeps sensitive info like keys out of code and allows easy config changes per environment.

Practice

(1/5)
1. What is the main reason to use environment variables in a Flask application?
easy
A. To make the app run without Python installed
B. To speed up the Flask server startup
C. To store user session data permanently
D. To keep sensitive information like passwords out of the code

Solution

  1. Step 1: Understand environment variables purpose

    Environment variables store sensitive info like passwords or API keys outside the code to keep them safe.
  2. Step 2: Identify the correct use in Flask

    Flask apps use environment variables to avoid hardcoding secrets and to configure settings per environment.
  3. Final Answer:

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

    Environment variables = keep secrets safe [OK]
Hint: Environment variables protect secrets outside code [OK]
Common Mistakes:
  • Thinking environment variables speed up the app
  • Confusing environment variables with session storage
  • Believing environment variables remove Python dependency
2. Which of the following is the correct way to read an environment variable named SECRET_KEY with a default fallback in Flask?
easy
A. os.getenv('SECRET_KEY', 'default_key')
B. os.environ['SECRET_KEY', 'default_key']
C. os.get('SECRET_KEY', 'default_key')
D. os.environ['SECRET_KEY'] or 'default_key'

Solution

  1. Step 1: Recall correct function to get env variable with default

    Use os.getenv with two arguments: variable name and default value.
  2. Step 2: Check each option syntax

    A raises KeyError if missing despite the fallback attempt. B uses invalid tuple syntax for dict access. C uses non-existent os.get. D: os.getenv('SECRET_KEY', 'default_key') is correct.
  3. Final Answer:

    os.getenv('SECRET_KEY', 'default_key') -> Option A
  4. Quick Check:

    Use os.getenv with default [OK]
Hint: Use os.getenv('VAR', 'default') to read env vars safely [OK]
Common Mistakes:
  • Using os.environ['KEY'] or default which still raises KeyError if missing
  • Using non-existent os.get function
  • Using invalid tuple syntax with os.environ
3. Given this Flask code snippet:
import os
secret = os.getenv('MY_SECRET', 'none')
print(secret)

If the environment variable MY_SECRET is not set, what will be printed?
medium
A. none
B. An error will occur because MY_SECRET is missing
C. None
D. '' (empty string)

Solution

  1. Step 1: Understand os.getenv behavior with default

    If the environment variable is missing, os.getenv returns the default value provided.
  2. Step 2: Check the default value in code

    The default is the string 'none', so it will print exactly 'none'.
  3. Final Answer:

    none -> Option A
  4. Quick Check:

    Missing env var returns default string [OK]
Hint: Missing env var prints default string given [OK]
Common Mistakes:
  • Expecting a runtime error if env var missing
  • Confusing string 'none' with Python None
  • Assuming empty string is default
4. What is wrong with this Flask code snippet for reading an environment variable?
import os
api_key = os.environ.get('API_KEY', 'default')
print(api_key)
medium
A. The code will raise a KeyError if API_KEY is missing
B. os.environ is a dictionary and does not have a get method
C. There is no error; the code works correctly
D. os.environ.get does not accept a default value argument

Solution

  1. Step 1: Check os.environ type and methods

    os.environ behaves like a dictionary and supports the get method with a default value.
  2. Step 2: Verify code behavior if variable missing

    If 'API_KEY' is missing, get returns the default 'default' without error.
  3. Final Answer:

    There is no error; the code works correctly -> Option C
  4. Quick Check:

    os.environ.get supports default argument [OK]
Hint: os.environ.get('VAR', default) works like dict.get [OK]
Common Mistakes:
  • Thinking os.environ lacks get method
  • Expecting KeyError when using get with default
  • Confusing os.getenv and os.environ.get differences
5. You want to configure your Flask app to use different database URLs for development and production using environment variables. Which approach correctly achieves this?
hard
A. Hardcode the production URL in code and ignore environment variables
B. Set DATABASE_URL in environment for each environment, then use os.getenv('DATABASE_URL') in Flask config
C. Use os.environ['DATABASE_URL'] without setting it in the environment
D. Store URLs in a Python file and import them instead of environment variables

Solution

  1. Step 1: Understand environment variable usage for config

    Set environment variables differently on each machine (dev, prod) to hold the database URL.
  2. Step 2: Use os.getenv in Flask config to read the variable

    Using os.getenv('DATABASE_URL') reads the correct URL depending on environment.
  3. Final Answer:

    Set DATABASE_URL in environment for each environment, then use os.getenv('DATABASE_URL') in Flask config -> Option B
  4. Quick Check:

    Env vars per environment + os.getenv = config flexibility [OK]
Hint: Set env vars per environment, read with os.getenv [OK]
Common Mistakes:
  • Hardcoding URLs loses flexibility and security
  • Using os.environ without setting env var causes errors
  • Storing secrets in code files risks exposure
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard