Bird
Raised Fist0
Flaskframework~5 mins

Environment variable management in Flask

Choose your learning style10 modes available
Introduction

Environment variables help keep sensitive information like passwords safe and let you change settings without changing your code.

You want to keep your database password secret and not write it in your code.
You need to switch between development and production settings easily.
You want to share your code without sharing private keys or secrets.
You want to configure your app differently on your computer and on a server.
Syntax
Flask
import os

# Get an environment variable
value = os.getenv('VARIABLE_NAME', 'default_value')

Use os.getenv to read environment variables safely.

You can provide a default value if the variable is not set.

Examples
This reads the SECRET_KEY environment variable.
Flask
import os

secret_key = os.getenv('SECRET_KEY')
This reads the PORT variable or uses '5000' if not set.
Flask
import os

port = os.getenv('PORT', '5000')
This reads DEBUG and converts it to a boolean.
Flask
import os

debug_mode = os.getenv('DEBUG', 'False') == 'True'
Sample Program

This Flask app reads the SECRET_KEY and PORT from environment variables. It shows the secret key on the home page and runs on the specified port or 5000 by default.

Flask
import os
from flask import Flask

app = Flask(__name__)

# Set secret key from environment variable
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'defaultsecret')

@app.route('/')
def home():
    return f"Secret key is: {app.config['SECRET_KEY']}"

if __name__ == '__main__':
    port = int(os.getenv('PORT', '5000'))
    app.run(debug=True, port=port)
OutputSuccess
Important Notes

Never commit real secrets to your code repository.

Use a .env file with tools like python-dotenv during development to load environment variables.

Environment variables are strings; convert them if you need other types.

Summary

Environment variables keep sensitive info safe and separate from code.

Use os.getenv to read them with optional defaults.

Set different values for development and production easily.

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