Kuidas parandada pydantiliste mudelite puuduvaid välju

Kuidas parandada pydantiliste mudelite puuduvaid välju
Kuidas parandada pydantiliste mudelite puuduvaid välju

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 NotificationPriority loendusklass liigitab prioriteeditasemed kõrgeks, keskmiseks ja madalaks. The Notification põhimudel sisaldab teatise põhiandmeid, samas kui EmailNotification mudel laiendab seda, et hõlmata meilipõhiseid välju, nagu email_to ja email_from.

The EmailNotificationSystem klass laieneb veelgi EmailNotification lisades automaatselt loodud kordumatu ID kasutades uuid.uuid4() ja ajatempel koos datetime.datetime.now(datetime.UTC).isoformat(). API lõpp-punkt, mis on määratletud @app.post("/notifications/email"), käsitleb POST-i taotlusi teatiste loomiseks. Lõpp-punkti funktsioon create_notification saab an EmailNotification objekt, prindib selle sisu kasutades email_notification.dict()ja tagastab eksemplari EmailNotificationSystem 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 NotificationPriority 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 EmailNotification 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.

Levinud küsimused Pydanticu ja FastAPI kohta

  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 Enum ja ainulaadsete väärtustega seotud sümboolsete nimede loomine.
  5. Mis teeb BaseModel teha Pydantic?
  6. BaseModel 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 uuid.uuid4() juhuslike UUID-de genereerimiseks.
  9. Kuidas saada praegune ajatempel ISO-vormingus?
  10. Praeguse ajatempli saate ISO-vormingus kasutada datetime.datetime.now(datetime.UTC).isoformat().
  11. Mis teeb @app.post dekoraator teeb FastAPI-s?
  12. The @app.post 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 dict() 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.

Viimased mõtted püdantilise välja probleemide kohta

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öö.