0Pricing
FastAPI Backend Development Bootcamp · Lezione

Tipi di dati e impostazioni personalizzati

Definisca tipi di dati Pydantic personalizzati e gestisca le impostazioni dell'applicazione usando `BaseSettings` di Pydantic.

Tipi di dati e impostazioni personalizzati è una lezione FastAPI Backend Development Bootcamp gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento FastAPI Backend Development Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso FastAPI Backend Development Bootcamp include 4 lezioni in totale.

Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.

Welcome to Custom Types!

Pydantic is great for validating data, but sometimes you need validation beyond its built-in types.

  • Custom Data Types let you define your own rules for data.
  • This ensures your data adheres to specific formats or business logic.
  • Think of it as extending Pydantic's power for unique needs.

`Annotated` for Custom Validation

Pydantic v2 uses Python's typing.Annotated alongside validator functions to create custom types.

  • Annotated: Adds metadata to a type hint.
  • BeforeValidator: Runs a function before Pydantic's standard validation.
  • This allows you to transform or validate input data before it's assigned.

Crafting a `CapitalizedString`

Let's create a custom type called CapitalizedString that ensures the first letter of a string is always uppercase.

Our validator function will check this rule. If the string isn't capitalized, it will raise an error.

Using Your Custom Type

Here's how to define and use our new CapitalizedString type in a Pydantic model. Try changing the name to start with a lowercase letter to see the validation error!

from typing import Annotated
from pydantic import BaseModel, BeforeValidator, ValidationError

def validate_capitalized(v: str) -> str:
    if not isinstance(v, str):
        raise TypeError("String required")
    if v and not v[0].isupper():
        raise ValueError("Must start with uppercase")
    return v

CapitalizedString = Annotated[str, BeforeValidator(validate_capitalized)]

class Product(BaseModel):
    name: CapitalizedString
    price: float

if __name__ == "__main__":
    try:
        product1 = Product(name="Laptop", price=1200.50)
        print(f"Product: {product1.name}")

        # This will raise a ValidationError
        # product2 = Product(name="keyboard", price=75.00)
    except ValidationError as e:
        print(f"Validation Error: {e}")

Manage Settings with `BaseSettings`

Application settings (like database URLs, API keys) often change between development and production environments.

BaseSettings, from pydantic-settings, is designed to manage these configurations easily. It automatically loads settings from:

  • Environment variables
  • .env files
  • Default values

Default Settings in Action

Define your settings as attributes in a class inheriting from BaseSettings. Pydantic handles the rest, providing default values if nothing else is specified.

from pydantic_settings import BaseSettings

class AppConfig(BaseSettings):
    app_name: str = "My FastAPI App"
    debug_mode: bool = False
    version: str = "1.0.0"

if __name__ == "__main__":
    settings = AppConfig()
    print(f"App Name: {settings.app_name}")
    print(f"Debug Mode: {settings.debug_mode}")
    print(f"Version: {settings.version}")

Loading from Environment Variables

BaseSettings automatically looks for environment variables that match your setting names (case-insensitive).

In this example, we temporarily set an environment variable to demonstrate how Pydantic picks it up, overriding the default.

import os
from pydantic_settings import BaseSettings

class AppConfig(BaseSettings):
    app_name: str = "Default App"
    database_url: str = "sqlite:///./test.db"

if __name__ == "__main__":
    print("--- Without env var ---")
    settings_default = AppConfig()
    print(f"App Name: {settings_default.app_name}")

    # Simulate setting an environment variable
    os.environ["APP_NAME"] = "Production App"
    os.environ["DATABASE_URL"] = "postgresql://user:pass@host:5432/db"

    print("\n--- With env var ---")
    settings_env = AppConfig()
    print(f"App Name: {settings_env.app_name}")
    print(f"DB URL: {settings_env.database_url}")

    # Clean up the environment variable for subsequent runs
    del os.environ["APP_NAME"]
    del os.environ["DATABASE_URL"]

Leveraging `.env` Files

For local development, it's common to store settings in a .env file (e.g., .env) in your project root.

You can configure BaseSettings to load from this file using SettingsConfigDict(env_file='.env') in your settings class.

Example .env content:
APP_NAME="Dev App"
API_KEY="your_dev_api_key"

from pydantic_settings import BaseSettings, SettingsConfigDict

class ProjectSettings(BaseSettings):
    model_config = SettingsConfigDict(env_file='.env', extra='ignore')

    app_name: str = "Default Project"
    api_key: str = "default_key"

# To make this runnable, you would need python-dotenv installed
# and an actual .env file in the same directory as the script.
# For this lesson, we show the setup.

# Example usage (if .env existed and python-dotenv was active):
# if __name__ == "__main__":
#     settings = ProjectSettings()
#     print(f"App Name: {settings.app_name}")
#     print(f"API Key: {settings.api_key}")

Understanding Settings Priority

When BaseSettings looks for a value, it follows a specific order of precedence:

  1. Environment variables (highest priority)
  2. .env file variables
  3. Default values defined in the BaseSettings class (lowest priority)

This ensures that environment variables can always override local .env files and class defaults, which is crucial for deployment.

Test Your Knowledge!

Which of the following are true about Pydantic's BaseSettings and custom types?

Recap: Custom Types & Settings

Great job! You've learned how to create powerful custom data types with Annotated and BeforeValidator, extending Pydantic's validation.

You also mastered BaseSettings for robust application configuration, understanding how it loads values from defaults, .env files, and environment variables with clear priority rules.

These tools are essential for building flexible and maintainable FastAPI applications!

Domande Frequenti

La lezione «Tipi di dati e impostazioni personalizzati» è gratuita?

Sì — il testo completo di «Tipi di dati e impostazioni personalizzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso FastAPI Backend Development Bootcamp, passa a CoddyKit PRO. Il corso FastAPI Backend Development Bootcamp include 4 lezioni in totale.

Cosa imparerò in «Tipi di dati e impostazioni personalizzati»?

Definisca tipi di dati Pydantic personalizzati e gestisca le impostazioni dell'applicazione usando `BaseSettings` di Pydantic. Eserciti FastAPI Backend Development Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare FastAPI Backend Development Bootcamp?

Non è richiesta alcuna esperienza precedente. FastAPI Backend Development Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Tipi di dati e impostazioni personalizzati»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione FastAPI Backend Development Bootcamp?

Sì. Ogni lezione FastAPI Backend Development Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Validazione dei campi Pydantic e validator
  2. Tipi di dati e impostazioni personalizzati
  3. Modelli annidati e strutture ricorsive
  4. Serializzazione con model_dump e alias
← Torna a FastAPI Backend Development Bootcamp