Sådan rettes manglende felter i pydantiske modeller

Python FastAPI

Fejlfinding af Pydantic e-mail-meddelelsesproblemer

I denne artikel undersøger vi, hvorfor Pydantic angiver, at felter mangler, selvom de er erklæret i koden. Dette problem opstår ofte, når du opretter en API, der behandler e-mailmeddelelser med yderligere felter som ID og tidsstempler.

Vi dykker ned i detaljerne i fejlmeddelelsen og giver en trin-for-trin løsning for at sikre, at alle felter genkendes korrekt. Derudover vil vi diskutere bedste praksis for håndtering af sådanne meddelelser i Pydantic-modeller.

Kommando Beskrivelse
uuid.uuid4() Genererer et tilfældigt UUID (Universally Unique Identifier).
datetime.datetime.now(datetime.UTC).isoformat() Henter den aktuelle dato og tid i ISO 8601-format med UTC-tidszone.
@app.post("/notifications/email") Definerer et slutpunkt i FastAPI til håndtering af POST-anmodninger for at oprette e-mail-meddelelser.
Enum Bruges til at oprette opregninger, et sæt symbolske navne bundet til unikke, konstante værdier.
BaseModel En basisklasse i Pydantic til oprettelse af datamodeller med typevalidering.
dict() Konverterer en pydantisk modelinstans til en ordbog.

Forståelse af Pydantic Email Notification System

De medfølgende scripts er designet til at oprette en API ved hjælp af FastAPI og Pydantic til håndtering af e-mail-meddelelser. Hovedstrukturen omfatter at definere en meddelelse med forskellige felter såsom meddelelsesindhold, prioritet og afsenderinformation. Det enumeration class kategoriserer prioritetsniveauerne som høj, medium og lav. Det basismodellen indeholder de grundlæggende meddelelsesdetaljer, mens model udvider dette til at omfatte e-mail-specifikke felter som email_to og .

Det klasse strækker sig yderligere ved at tilføje et automatisk genereret unikt ID vha og et tidsstempel med datetime.datetime.now(datetime.UTC).isoformat(). API-endepunktet, defineret med , håndterer POST-anmodninger om at oprette meddelelser. Endpoint-funktionen modtager en objekt, udskriver dets indhold vha email_notification.dict(), og returnerer en forekomst af med de ekstra felter.

Løsning af problem med manglende felter i Pydantic API

Python med FastAPI og Pydantic

from enum import Enum
from pydantic import BaseModel
from fastapi import FastAPI
import uuid
import datetime

app = FastAPI()

class NotificationPriority(Enum):
    high = "high"
    medium = "medium"
    low = "low"

class Notification(BaseModel):
    notification: str
    priority: NotificationPriority
    notification_from: str

class EmailNotification(Notification):
    email_to: str
    email_from: str | None = None

class EmailNotificationSystem(BaseModel):
    id: uuid.UUID = uuid.uuid4()
    ts: datetime.datetime = datetime.datetime.now(datetime.UTC).isoformat()
    email: EmailNotification

@app.post("/notifications/email")
async def create_notification(email_notification: EmailNotification):
    print(email_notification.dict())
    system = EmailNotificationSystem(email=email_notification)
    return system

Bedste praksis for håndtering af meddelelser i Pydantic

Python med FastAPI og Pydantic

from enum import Enum
from pydantic import BaseModel
from fastapi import FastAPI
import uuid
import datetime

app = FastAPI()

class NotificationPriority(Enum):
    HIGH = "high"
    MEDIUM = "medium"
    LOW = "low"

class Notification(BaseModel):
    notification: str
    priority: NotificationPriority
    notification_from: str

class EmailNotification(Notification):
    email_to: str
    email_from: str | None = None

class EmailNotificationSystem(BaseModel):
    id: uuid.UUID = uuid.uuid4()
    ts: datetime.datetime = datetime.datetime.now(datetime.timezone.utc)
    email: EmailNotification

@app.post("/notifications/email")
async def create_notification(email_notification: EmailNotification):
    print(email_notification.dict())
    system = EmailNotificationSystem(email=email_notification)
    return system

Avanceret brug af Pydantic og FastAPI til meddelelser

Et andet vigtigt aspekt at overveje, når du bruger Pydantic og FastAPI til at oprette API'er, er datavalidering og serialisering. Pydantic udmærker sig ved at sikre, at data er i overensstemmelse med specificerede typer, hvilket er afgørende for at bevare dataintegriteten. I vores eksempel bruger enums som sikrer, at kun gyldige prioritetsniveauer accepteres. Derudover kan udnyttelse af Pydantics evne til at parse og validere indlejrede modeller forenkle håndteringen af ​​komplekse datastrukturer. Ved at definere model, indkapsler vi alle relevante felter relateret til e-mailmeddelelser.

Ydermere hjælper håndtering af tidsstempler og UUID'er inden for Pydantic-modeller med automatisk at administrere unikke identifikatorer og tidsstempler, hvilket sikrer, at hver notifikation er sporbar og unik. Denne praksis hjælper ikke kun med fejlretning, men forbedrer også systemets sikkerhed og pålidelighed. FastAPIs integration med Pydantic giver mulighed for problemfri anmodningshåndtering og datavalidering, hvilket gør det til et fremragende valg til at bygge robuste API'er. Kombinationen af ​​disse værktøjer sikrer, at applikationen kan håndtere forskellige edge cases og fejl elegant, hvilket giver en smidig brugeroplevelse.

  1. Hvad bruges Pydantic til?
  2. Pydantic bruges til datavalidering og styring af indstillinger ved hjælp af annoteringer af Python-typen.
  3. Hvordan definerer du en enum i Pydantic?
  4. Du definerer en enum i Pydantic ved at underklassificere og skabe symbolske navne bundet til unikke værdier.
  5. Hvad gør gøre i Pydantic?
  6. fungerer som en basisklasse til at skabe datamodeller med typevalidering og serialiseringsfunktioner.
  7. Hvordan opretter man en unik identifikator i en Pydantisk model?
  8. Du kan oprette en unik identifikator i en Pydantisk model vha til generering af tilfældige UUID'er.
  9. Hvordan kan du få det aktuelle tidsstempel i ISO-format?
  10. Du kan få det aktuelle tidsstempel i ISO-format vha .
  11. Hvad gør dekoratør gøre i FastAPI?
  12. Det decorator definerer et slutpunkt til håndtering af POST-anmodninger i en FastAPI-applikation.
  13. Hvordan konverterer man en Pydantisk model til en ordbog?
  14. Du kan konvertere en Pydantisk model til en ordbog ved hjælp af metode.
  15. Hvad er fordelene ved at bruge Pydantic med FastAPI?
  16. Fordelene ved at bruge Pydantic med FastAPI omfatter robust datavalidering, automatisk dokumentation og problemfri anmodningshåndtering.

Som konklusion kan problemet med manglende felter i Pydantiske modeller løses ved at sikre korrekt datavalidering og modelinstantiering. Brug af FastAPI sammen med Pydantic tilbyder en kraftfuld kombination til at bygge robuste API'er. Korrekt definition af enums, håndtering af indlejrede modeller og brug af UUID'er og tidsstempler hjælper effektivt med at administrere komplekse datastrukturer. Denne praksis løser ikke kun valideringsfejl, men forbedrer også systemets overordnede pålidelighed og vedligeholdelse, hvilket sikrer en jævn og fejlfri drift.