Kuidas parandada pydantiliste mudelite puuduvaid välju

Python FastAPI

Pydantilise e-posti teavitusprobleemide tõrkeotsing

Selles artiklis uurime, miks Pydantic näitab, et väljad puuduvad, kuigi need on koodis deklareeritud. See probleem tekib sageli API loomisel, mis töötleb meiliteatisi lisaväljadega, nagu ID ja ajatemplid.

Sukeldume veateate üksikasjadesse ja pakume samm-sammult lahendust, et tagada kõigi väljade õige tuvastamine. Lisaks käsitleme Pydanticu mudelites selliste teatiste käsitlemise parimaid tavasid.

Käsk Kirjeldus
uuid.uuid4() Loob juhusliku UUID-i (universaalselt kordumatu identifikaator).
datetime.datetime.now(datetime.UTC).isoformat() Hangib praeguse kuupäeva ja kellaaja ISO 8601 vormingus UTC ajavööndiga.
@app.post("/notifications/email") Määratleb FastAPI lõpp-punkti meiliteatiste loomiseks vajalike POST-i taotluste käsitlemiseks.
Enum Kasutatakse loenduste loomiseks, sümboolsete nimede komplekti, mis on seotud kordumatute, püsivate väärtustega.
BaseModel Põhiklass Pydanticus andmemudelite loomiseks tüübivalideerimisega.
dict() Teisendab Pydantic mudeli eksemplari sõnaraamatuks.

Pydantilise e-posti teavitussüsteemi mõistmine

Kaasasolevad skriptid on loodud API loomiseks, kasutades meiliteatiste käsitlemiseks FastAPI-d ja Pydanticut. Põhistruktuur sisaldab teatise määratlemist erinevate väljadega, nagu teatise sisu, prioriteet ja saatja teave. The loendusklass liigitab prioriteeditasemed kõrgeks, keskmiseks ja madalaks. The põhimudel sisaldab teatise põhiandmeid, samas kui mudel laiendab seda, et hõlmata meilipõhiseid välju, nagu email_to ja .

The klass laieneb veelgi lisades automaatselt loodud kordumatu ID kasutades ja ajatempel koos datetime.datetime.now(datetime.UTC).isoformat(). API lõpp-punkt, mis on määratletud , käsitleb POST-i taotlusi teatiste loomiseks. Lõpp-punkti funktsioon saab an objekt, prindib selle sisu kasutades email_notification.dict()ja tagastab eksemplari lisaväljadega.

Puuduvate väljade probleemi lahendamine Pydantic API-s

Python koos FastAPI ja Pydanticuga

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

Märguannete haldamise parimad tavad Pydanticus

Python koos FastAPI ja Pydanticuga

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

Pydanticu ja FastAPI täiustatud kasutamine teavituste jaoks

Teine oluline aspekt, mida Pydanticu ja FastAPI kasutamisel API-de loomisel arvestada, on andmete valideerimine ja serialiseerimine. Pydantic tagab suurepärase andmete vastavuse kindlaksmääratud tüüpidele, mis on andmete terviklikkuse säilitamiseks ülioluline. Meie näites kasutades enumse nagu tagab, et aktsepteeritakse ainult kehtivaid prioriteetsuse tasemeid. Lisaks võib Pydanticu pesastatud mudelite sõelumise ja valideerimise võime kasutamine lihtsustada keerukate andmestruktuuride käsitlemist. Määrates kindlaks mudelit, kapseldame kõik asjakohased väljad, mis on seotud meiliteatistega.

Lisaks aitab ajatemplite ja UUID-de käsitlemine Pydanticu mudelites automaatselt hallata kordumatuid identifikaatoreid ja ajatempleid, tagades, et iga teatis on jälgitav ja kordumatu. See tava mitte ainult ei aita silumist, vaid suurendab ka süsteemi turvalisust ja töökindlust. FastAPI integratsioon Pydanticuga võimaldab sujuvat taotluste käsitlemist ja andmete valideerimist, muutes selle suurepäraseks valikuks tugevate API-de loomiseks. Nende tööriistade kombinatsioon tagab, et rakendus saab graatsiliselt hakkama erinevate servajuhtumite ja vigadega, pakkudes sujuvat kasutuskogemust.

  1. Milleks Pydanticut kasutatakse?
  2. Pydanticit kasutatakse andmete valideerimiseks ja seadete haldamiseks Pythoni tüüpi märkuste abil.
  3. Kuidas määratlete Pydanticus enumi?
  4. Pydanticus määrate enumi alamklasside abil ja ainulaadsete väärtustega seotud sümboolsete nimede loomine.
  5. Mis teeb teha Pydantic?
  6. toimib baasklassina andmemudelite loomiseks, millel on tüübikinnituse ja serialiseerimise võimalused.
  7. Kuidas luua Pydantic mudelis ainulaadset identifikaatorit?
  8. Pydantilises mudelis saate luua kordumatu identifikaatori, kasutades juhuslike UUID-de genereerimiseks.
  9. Kuidas saada praegune ajatempel ISO-vormingus?
  10. Praeguse ajatempli saate ISO-vormingus kasutada .
  11. Mis teeb dekoraator teeb FastAPI-s?
  12. The dekoraator määrab FastAPI rakenduses POST-päringute käsitlemise lõpp-punkti.
  13. Kuidas muuta Pydantic mudel sõnaraamatuks?
  14. Pydantilise mudeli saate teisendada sõnastikuks, kasutades meetod.
  15. Millised on Pydanticu kasutamise eelised koos FastAPI-ga?
  16. Pydanticu kasutamise eelised koos FastAPI-ga hõlmavad tugevat andmete valideerimist, automaatset dokumenteerimist ja tõrgeteta päringute käsitlemist.

Kokkuvõtteks võib öelda, et Pydantic mudelite puuduvate väljade probleemi saab lahendada, tagades korrektse andmete valideerimise ja mudeli instantimise. FastAPI kasutamine koos Pydanticuga pakub võimsat kombinatsiooni tugevate API-de loomiseks. Enumide õige määratlemine, pesastatud mudelite käsitlemine ning UUID-de ja ajatemplite kasutamine aitab tõhusalt hallata keerulisi andmestruktuuri. Need tavad mitte ainult ei lahenda valideerimisvigu, vaid parandavad ka süsteemi üldist töökindlust ja hooldatavust, tagades sujuva ja vigadeta töö.