Kako popraviti manjkajoča polja v Pydantic modelih

Kako popraviti manjkajoča polja v Pydantic modelih
Kako popraviti manjkajoča polja v Pydantic modelih

Odpravljanje težav s Pydantic e-poštnimi obvestili

V tem članku raziskujemo, zakaj Pydantic nakazuje, da polja manjkajo, čeprav so navedena v kodi. Ta težava se pogosto pojavi pri ustvarjanju API-ja, ki obdeluje e-poštna obvestila z dodatnimi polji, kot sta ID in časovni žig.

Poglobili se bomo v podrobnosti sporočila o napaki in ponudili rešitev po korakih, da zagotovimo pravilno prepoznavanje vseh polj. Poleg tega bomo razpravljali o najboljših praksah za obravnavanje takih obvestil v modelih Pydantic.

Ukaz Opis
uuid.uuid4() Generira naključni UUID (Universally Unique Identifier).
datetime.datetime.now(datetime.UTC).isoformat() Pridobi trenutni datum in čas v formatu ISO 8601 s časovnim pasom UTC.
@app.post("/notifications/email") Definira končno točko v FastAPI za obdelavo zahtev POST za ustvarjanje e-poštnih obvestil.
Enum Uporablja se za ustvarjanje naštevanj, niza simboličnih imen, vezanih na edinstvene, konstantne vrednosti.
BaseModel Osnovni razred v Pydantic za ustvarjanje podatkovnih modelov s preverjanjem tipa.
dict() Pretvori primerek modela Pydantic v slovar.

Razumevanje sistema obveščanja po e-pošti Pydantic

Priloženi skripti so zasnovani za ustvarjanje API-ja z uporabo FastAPI in Pydantic za obdelavo e-poštnih obvestil. Glavna struktura vključuje definiranje obvestila z različnimi polji, kot so vsebina obvestila, prioriteta in podatki o pošiljatelju. The NotificationPriority enumeration class kategorizira nivoje prioritete kot visoke, srednje in nizke. The Notification osnovni model vsebuje osnovne podrobnosti obvestila, medtem ko model EmailNotification model to razširi tako, da vključuje polja, specifična za e-pošto, kot je email_to in email_from.

The EmailNotificationSystem razred še razširi EmailNotification z dodajanjem samodejno ustvarjenega edinstvenega ID-ja z uporabo uuid.uuid4() in časovni žig z datetime.datetime.now(datetime.UTC).isoformat(). Končna točka API-ja, definirana z @app.post("/notifications/email"), obravnava zahteve POST za ustvarjanje obvestil. Funkcija končne točke create_notification prejme an EmailNotification objekt, natisne njegovo vsebino z uporabo email_notification.dict()in vrne primerek EmailNotificationSystem z dodatnimi polji.

Reševanje težave z manjkajočimi polji v API-ju Pydantic

Python s FastAPI in 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

Najboljše prakse za ravnanje z obvestili v Pydantic

Python s FastAPI in 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

Napredna uporaba Pydantic in FastAPI za obvestila

Drug pomemben vidik, ki ga je treba upoštevati pri uporabi Pydantic in FastAPI za ustvarjanje API-jev, je preverjanje podatkov in serializacija. Pydantic je odličen pri zagotavljanju skladnosti podatkov z določenimi vrstami, kar je ključnega pomena za ohranjanje celovitosti podatkov. V našem primeru uporaba enumov, kot je NotificationPriority zagotavlja, da so sprejete le veljavne ravni prioritete. Poleg tega lahko izkoriščanje sposobnosti Pydantica za razčlenjevanje in preverjanje ugnezdenih modelov poenostavi ravnanje s kompleksnimi podatkovnimi strukturami. Z opredelitvijo EmailNotification modela, povzemamo vsa relevantna polja, povezana z e-poštnimi obvestili.

Poleg tega ravnanje s časovnimi žigi in UUID-ji znotraj modelov Pydantic pomaga pri samodejnem upravljanju edinstvenih identifikatorjev in časovnih žigov, kar zagotavlja, da je vsako obvestilo sledljivo in edinstveno. Ta praksa ne le pomaga pri odpravljanju napak, ampak tudi poveča varnost in zanesljivost sistema. Integracija FastAPI s Pydantic omogoča brezhibno obdelavo zahtev in preverjanje veljavnosti podatkov, zaradi česar je odlična izbira za izdelavo robustnih API-jev. Kombinacija teh orodij zagotavlja, da lahko aplikacija elegantno obravnava različne robne primere in napake, kar zagotavlja gladko uporabniško izkušnjo.

Pogosta vprašanja o Pydantic in FastAPI

  1. Za kaj se zdravilo Pydantic uporablja?
  2. Pydantic se uporablja za preverjanje podatkov in upravljanje nastavitev z uporabo opomb tipa Python.
  3. Kako definirate enum v Pydantic?
  4. Enum v Pydantic definirate s podrazredom Enum in ustvarjanje simboličnih imen, vezanih na edinstvene vrednosti.
  5. Kaj počne BaseModel narediti v Pydantic?
  6. BaseModel služi kot osnovni razred za ustvarjanje podatkovnih modelov z zmožnostmi validacije tipa in serializacije.
  7. Kako ustvarite edinstven identifikator v modelu Pydantic?
  8. Ustvarite lahko edinstven identifikator v modelu Pydantic z uporabo uuid.uuid4() za generiranje naključnih UUID-jev.
  9. Kako lahko dobite trenutni časovni žig v formatu ISO?
  10. Trenutni časovni žig lahko dobite v formatu ISO z uporabo datetime.datetime.now(datetime.UTC).isoformat().
  11. Kaj počne @app.post dekorater v FastAPI?
  12. The @app.post dekorater definira končno točko za obravnavanje zahtev POST v aplikaciji FastAPI.
  13. Kako pretvorite model Pydantic v slovar?
  14. Model Pydantic lahko pretvorite v slovar z uporabo dict() metoda.
  15. Kakšne so prednosti uporabe Pydantic s FastAPI?
  16. Prednosti uporabe Pydantic s FastAPI vključujejo robustno preverjanje podatkov, samodejno dokumentiranje in brezhibno obravnavanje zahtev.

Končne misli o vprašanjih Pydantic Field Issues

Skratka, problem manjkajočih polj v modelih Pydantic je mogoče rešiti z zagotavljanjem pravilne validacije podatkov in instanciranja modela. Uporaba FastAPI skupaj s Pydantic ponuja močno kombinacijo za gradnjo robustnih API-jev. Pravilno definiranje enumov, obravnavanje ugnezdenih modelov ter uporaba UUID-jev in časovnih žigov učinkovito pomagajo pri upravljanju kompleksnih podatkovnih struktur. Te prakse ne le odpravljajo napak pri preverjanju, ampak tudi izboljšajo splošno zanesljivost in vzdržljivost sistema, kar zagotavlja nemoteno delovanje brez napak.