Anpassade datatyper och inställningar
Definiera anpassade Pydantic-datatyper och hantera applikationsinställningar med Pydantic:s `BaseSettings`.
Anpassade datatyper och inställningar är en gratis lektion i Bootcamp i backendutveckling med FastAPI på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Bootcamp i backendutveckling med FastAPI, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bootcamp i backendutveckling med FastAPI innehåller totalt 4 lektioner.
Välkommen till anpassade typer!
Pydantic är utmärkt för att validera data, men ibland behöver du validering utöver de inbyggda typerna.
- Anpassade datatyper låter dig definiera egna regler för data.
- Det säkerställer att dina data följer specifika format eller affärslogik.
- Se det som att du utökar Pydantics funktionalitet för unika behov.
`Annotated` för anpassad validering
Pydantic v2 använder Pythons typing.Annotated tillsammans med validatorfunktioner för att skapa anpassade typer.
Annotated: Lägger till metadata i en typhint.BeforeValidator: Kör en funktion innan Pydantics standardvalidering.- Detta låter dig omforma eller validera indata innan den tilldelas.
Skapa en `CapitalizedString`
Vi ska skapa en anpassad typ som heter CapitalizedString och som säkerställer att den första bokstaven i en sträng alltid är versal.
Vår validatorfunktion kontrollerar denna regel. Om strängen inte börjar med en versal genereras ett fel.
Använda din anpassade typ
Så här definierar och använder du vår nya typ CapitalizedString i en Pydantic-modell. Prova att ändra name så att det börjar med en gemen för att se valideringsfelet!
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}")Hantera inställningar med `BaseSettings`
Applikationsinställningar (som databas-URL:er och API-nycklar) ändras ofta mellan utvecklings- och produktionsmiljöer.
BaseSettings från pydantic-settings är utformad för att göra det enkelt att hantera dessa konfigurationer. Den läser automatiskt in inställningar från:
- Miljövariabler
.env-filer- Standardvärden
Standardinställningar i praktiken
Definiera inställningarna som attribut i en klass som ärver från BaseSettings. Pydantic hanterar resten och tillhandahåller standardvärden om inget annat har angetts.
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}")Läsa in miljövariabler
BaseSettings letar automatiskt efter miljövariabler som motsvarar namnen på dina inställningar (utan hänsyn till skiftläge).
I det här exemplet anger vi tillfälligt en miljövariabel för att visa hur Pydantic läser in den och ersätter standardvärdet.
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"]Använda `.env`-filer
Vid lokal utveckling är det vanligt att lagra inställningar i en .env-fil (till exempel .env) i projektets rotkatalog.
Du kan konfigurera BaseSettings så att den läser in denna fil genom att använda SettingsConfigDict(env_file='.env') i inställningsklassen.
Exempel på innehåll i .env: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}")
Förstå prioriteten för inställningar
När BaseSettings letar efter ett värde följer den en specifik prioritetsordning:
- Miljövariabler (högst prioritet)
- Variabler i
.env-filen - Standardvärden som definieras i klassen
BaseSettings(lägst prioritet)
Detta säkerställer att miljövariabler alltid kan åsidosätta lokala .env-filer och klassens standardvärden, vilket är avgörande vid driftsättning.
Testa dina kunskaper!
Vilka av följande påståenden om Pydantics BaseSettings och anpassade typer är sanna?
Sammanfattning: Anpassade typer och inställningar
Bra jobbat! Du har lärt dig att skapa kraftfulla anpassade datatyper med Annotated och BeforeValidator och därmed utöka Pydantics validering.
Du har också lärt dig att använda BaseSettings för robust applikationskonfiguration och förstått hur den läser in värden från standardvärden, .env-filer och miljövariabler enligt tydliga prioritetsregler.
Dessa verktyg är viktiga när du bygger flexibla och lättunderhållna FastAPI-applikationer!
Lär dig Bootcamp i backendutveckling med FastAPI med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 21
- Lektioner
- 84
Vanliga frågor
Är lektionen ”Anpassade datatyper och inställningar” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Bootcamp i backendutveckling med FastAPI, inklusive ”Anpassade datatyper och inställningar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Bootcamp i backendutveckling med FastAPI innehåller totalt 4 lektioner.
Vad lär jag mig i ”Anpassade datatyper och inställningar”?
Definiera anpassade Pydantic-datatyper och hantera applikationsinställningar med Pydantic:s `BaseSettings`. Ni övar på Bootcamp i backendutveckling med FastAPI med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Bootcamp i backendutveckling med FastAPI?
Du behöver inga förkunskaper. Utbildningen i Bootcamp i backendutveckling med FastAPI på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Anpassade datatyper och inställningar”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Bootcamp i backendutveckling med FastAPI-lektionen?
Ja. Varje Bootcamp i backendutveckling med FastAPI-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Pydantic-fältvalidering och validatorer
- Anpassade datatyper och inställningar
- Nästadade modeller och rekursiva strukturer
- Serialisering med model_dump och alias