Bird
Raised Fist0
FastAPIframework~5 mins

Configuration management in FastAPI

Choose your learning style10 modes available
Introduction

Configuration management helps your FastAPI app use settings like database info or secret keys safely and easily.

You want to keep secret keys or passwords out of your code.
You need to change settings without changing your app code.
You want to use different settings for development and production.
You want to load settings from environment variables or files.
You want to avoid hardcoding values in your FastAPI app.
Syntax
FastAPI
from pydantic import BaseSettings

class Settings(BaseSettings):
    app_name: str
    admin_email: str
    items_per_user: int = 50

    class Config:
        env_file = ".env"

settings = Settings()

Use BaseSettings from Pydantic to define config variables.

Set env_file in Config to load variables from a file.

Examples
Defines settings with a default and a required variable.
FastAPI
from pydantic import BaseSettings

class Settings(BaseSettings):
    debug: bool = False
    database_url: str

settings = Settings()
Loads secret_key from a .env file automatically.
FastAPI
from pydantic import BaseSettings

class Settings(BaseSettings):
    secret_key: str

    class Config:
        env_file = ".env"

settings = Settings()
Load settings from a specific environment file.
FastAPI
settings = Settings(_env_file='.env.production')
Sample Program

This FastAPI app uses configuration management to load settings from a .env file or environment variables. The endpoint returns these settings as JSON.

FastAPI
from fastapi import FastAPI
from pydantic import BaseSettings

class Settings(BaseSettings):
    app_name: str = "My FastAPI App"
    admin_email: str
    items_per_user: int = 10

    class Config:
        env_file = ".env"

settings = Settings()

app = FastAPI()

@app.get("/")
async def read_root():
    return {
        "app_name": settings.app_name,
        "admin_email": settings.admin_email,
        "items_per_user": settings.items_per_user
    }
OutputSuccess
Important Notes

Always keep your .env file out of version control to protect secrets.

You can override settings by setting environment variables directly.

Use type hints in BaseSettings to validate config values automatically.

Summary

Use pydantic.BaseSettings to manage FastAPI app configuration.

Load settings from environment variables or .env files for flexibility and security.

Access settings anywhere in your app by creating a settings instance.

Practice

(1/5)
1. What is the primary purpose of using pydantic.BaseSettings in a FastAPI application?
easy
A. To generate API documentation
B. To manage application configuration using environment variables or .env files
C. To handle HTTP request routing
D. To create database models automatically

Solution

  1. Step 1: Understand the role of pydantic.BaseSettings

    BaseSettings is designed to load configuration values from environment variables or .env files.
  2. Step 2: Differentiate from other FastAPI features

    Database models, routing, and documentation are handled by other parts of FastAPI, not BaseSettings.
  3. Final Answer:

    To manage application configuration using environment variables or .env files -> Option B
  4. Quick Check:

    Configuration management = To manage application configuration using environment variables or .env files [OK]
Hint: Remember: BaseSettings is for config, not routing or DB [OK]
Common Mistakes:
  • Confusing BaseSettings with database model classes
  • Thinking BaseSettings handles API routing
  • Assuming BaseSettings generates docs
2. Which of the following is the correct way to define a FastAPI settings class using pydantic.BaseSettings?
easy
A. def Settings(): return BaseSettings(app_name="MyApp")
B. class Settings: app_name = BaseSettings("MyApp")
C. class Settings(BaseModel): app_name: str = "MyApp"
D. class Settings(BaseSettings): app_name: str = "MyApp"

Solution

  1. Step 1: Check class inheritance

    The settings class must inherit from BaseSettings to load environment variables.
  2. Step 2: Verify attribute definition

    Attributes are defined as class variables with type annotations and default values.
  3. Final Answer:

    class Settings(BaseSettings): app_name: str = "MyApp" -> Option D
  4. Quick Check:

    Correct inheritance and attribute syntax = class Settings(BaseSettings): app_name: str = "MyApp" [OK]
Hint: Settings class must inherit BaseSettings with typed attributes [OK]
Common Mistakes:
  • Using BaseModel instead of BaseSettings
  • Defining settings as a function
  • Incorrect inheritance or attribute assignment
3. Given this settings class and environment variable API_KEY=secret123 set, what will print(settings.api_key) output?
from pydantic import BaseSettings

class Settings(BaseSettings):
    api_key: str

settings = Settings()
medium
A. '' (empty string)
B. None
C. secret123
D. Raises a validation error

Solution

  1. Step 1: Understand environment variable loading

    BaseSettings automatically reads environment variables matching attribute names in uppercase.
  2. Step 2: Check if API_KEY is set

    The environment variable API_KEY=secret123 is set, so settings.api_key will be 'secret123'.
  3. Final Answer:

    secret123 -> Option C
  4. Quick Check:

    Env var API_KEY loads as 'secret123' [OK]
Hint: BaseSettings reads uppercase env vars matching attribute names [OK]
Common Mistakes:
  • Assuming missing default means None instead of error
  • Thinking attribute names are case-sensitive differently
  • Expecting empty string if env var is set
4. Identify the error in this FastAPI settings code snippet:
from pydantic import BaseSettings

class Settings(BaseSettings):
    debug: bool = False

settings = Settings(debug="foo")
medium
A. Passing a string "foo" instead of a boolean causes a validation error
B. Missing environment variable causes failure
C. BaseSettings cannot have default values
D. Class must inherit from BaseModel, not BaseSettings

Solution

  1. Step 1: Check type of passed value

    The debug attribute expects a boolean, but the code passes a string "foo".
  2. Step 2: Understand Pydantic validation

    Pydantic tries to coerce the string to bool but "foo" is not recognized, causing a ValidationError.
  3. Final Answer:

    Passing a string "foo" instead of a boolean causes a validation error -> Option A
  4. Quick Check:

    Pydantic rejects invalid bool strings like "foo" [OK]
Hint: Pydantic bool fields reject invalid strings like "foo" [OK]
Common Mistakes:
  • Thinking Pydantic converts any string to bool
  • Missing environment variable causes failure
  • BaseSettings cannot have default values
5. You want to load configuration from a .env file and override some values with environment variables in FastAPI. Which approach correctly achieves this using pydantic.BaseSettings?
hard
A. Create a Settings class inheriting BaseSettings with class Config: env_file = '.env' and place a .env file in the project root; environment variables override .env values automatically
B. Manually read .env file with open() and parse it, then pass values to Settings constructor
C. Use BaseModel instead of BaseSettings and load .env with dotenv package separately
D. Set environment variables only; .env files are not supported by BaseSettings

Solution

  1. Step 1: Understand BaseSettings .env support

    BaseSettings loads .env files when env_file='.env' is set in the inner Config class.
  2. Step 2: Know environment variable precedence

    Environment variables override .env file values automatically when both exist.
  3. Final Answer:

    Create a Settings class inheriting BaseSettings with class Config: env_file = '.env' and place a .env file in the project root; environment variables override .env values automatically -> Option A
  4. Quick Check:

    BaseSettings loads .env via Config env_file and env vars override [OK]
Hint: BaseSettings loads .env via Config(env_file='.env'); env vars override .env values [OK]
Common Mistakes:
  • Manually parsing .env instead of using BaseSettings Config
  • Using BaseModel which lacks .env support
  • Thinking .env files are unsupported by BaseSettings
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