Kaip pataisyti trūkstamus laukus pydantiniuose modeliuose

Python FastAPI

„Pydantic“ el. pašto pranešimų trikčių šalinimas

Šiame straipsnyje nagrinėjame, kodėl „Pydantic“ nurodo, kad trūksta laukų, nors jie yra deklaruoti kode. Ši problema dažnai iškyla kuriant API, kuri apdoroja el. pašto pranešimus su papildomais laukais, pvz., ID ir laiko žymomis.

Išnagrinėsime klaidos pranešimo specifiką ir pateiksime nuoseklų sprendimą, kad visi laukai būtų atpažinti teisingai. Be to, aptarsime geriausią tokių pranešimų tvarkymo „Pydantic“ modeliuose praktiką.

komandą apibūdinimas
uuid.uuid4() Sugeneruoja atsitiktinį UUID (visuotinai unikalų identifikatorių).
datetime.datetime.now(datetime.UTC).isoformat() Gauna dabartinę datą ir laiką ISO 8601 formatu su UTC laiko juosta.
@app.post("/notifications/email") Apibrėžia „FastAPI“ galinį tašką, skirtą apdoroti POST užklausas sukurti el. pašto pranešimus.
Enum Naudojamas sudaryti išvardijimus, simbolinių pavadinimų rinkinį, susietą su unikaliomis, pastoviomis reikšmėmis.
BaseModel Pagrindinė „Pydantic“ klasė, skirta kurti duomenų modelius su tipo patvirtinimu.
dict() Konvertuoja Pydantic modelio egzempliorių į žodyną.

Pydantic el. pašto pranešimų sistemos supratimas

Pateikti scenarijai skirti sukurti API naudojant FastAPI ir Pydantic el. pašto pranešimams tvarkyti. Pagrindinė struktūra apima pranešimo apibrėžimą įvairiais laukais, tokiais kaip pranešimo turinys, prioritetas ir siuntėjo informacija. The surašymo klasė suskirsto prioriteto lygius į aukštą, vidutinį ir žemą. The baziniame modelyje yra pagrindinė pranešimo informacija, o modelis išplečia tai, kad apimtų specifinius el. pašto laukus, pvz., email_to ir .

The klasė toliau plečiasi naudodami automatiškai sugeneruotą unikalų ID ir laiko žyma su datetime.datetime.now(datetime.UTC).isoformat(). API galutinis taškas, apibrėžtas su , apdoroja POST užklausas sukurti pranešimus. Galinio taško funkcija gauna an objektą, spausdina jo turinį naudodamas email_notification.dict()ir grąžina egzempliorių su papildomais laukais.

Trūkstamų laukų problemos sprendimas Pydantic API

Python su FastAPI ir 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

Geriausia „Pydantic“ pranešimų tvarkymo praktika

Python su FastAPI ir 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

Išplėstinis Pydantic ir FastAPI naudojimas pranešimams

Kitas svarbus aspektas, į kurį reikia atsižvelgti kuriant API naudojant Pydantic ir FastAPI, yra duomenų patvirtinimas ir serializavimas. „Pydantic“ puikiai užtikrina, kad duomenys atitiktų nurodytus tipus, o tai labai svarbu norint išlaikyti duomenų vientisumą. Mūsų pavyzdyje naudojant tokius enumus kaip užtikrina, kad priimami tik galiojantys prioriteto lygiai. Be to, pasinaudojus Pydantic gebėjimu analizuoti ir patvirtinti įdėtuosius modelius, galima supaprastinti sudėtingų duomenų struktūrų tvarkymą. Apibrėžiant modelį, įterpiame visus susijusius laukus, susijusius su el. pašto pranešimais.

Be to, laiko žymų ir UUID tvarkymas „Pydantic“ modeliuose padeda automatiškai valdyti unikalius identifikatorius ir laiko žymes, užtikrinant, kad kiekvienas pranešimas būtų atsekamas ir unikalus. Ši praktika ne tik padeda derinti, bet ir padidina sistemos saugumą bei patikimumą. FastAPI integracija su Pydantic leidžia sklandžiai tvarkyti užklausas ir patvirtinti duomenis, todėl tai yra puikus pasirinkimas kuriant patikimas API. Šių įrankių derinys užtikrina, kad programa gali grakščiai tvarkyti įvairius kraštutinius atvejus ir klaidas, užtikrindama sklandžią vartotojo patirtį.

  1. Kam naudojamas Pydantic?
  2. Pydantic naudojama duomenų patvirtinimui ir nustatymų valdymui naudojant Python tipo anotacijas.
  3. Kaip pydantic apibrėžiate enumą?
  4. Pydantic enum apibrėžiate subklasifikuodami ir sukurti simbolinius pavadinimus, susietus su unikaliomis vertybėmis.
  5. Ką daro daryti Pydantic?
  6. tarnauja kaip bazinė klasė duomenų modeliams su tipo patvirtinimo ir serializavimo galimybėmis kurti.
  7. Kaip sukurti unikalų identifikatorių Pydantic modelyje?
  8. Galite sukurti unikalų identifikatorių Pydantic modelyje naudodami atsitiktiniams UUID generavimui.
  9. Kaip gauti dabartinę laiko žymą ISO formatu?
  10. Dabartinę laiko žymą galite gauti ISO formatu naudodami .
  11. Ką daro dekoratorius veikia FastAPI?
  12. The dekoratorius apibrėžia galutinį tašką POST užklausoms tvarkyti FastAPI programoje.
  13. Kaip konvertuoti Pydantic modelį į žodyną?
  14. Galite konvertuoti Pydantic modelį į žodyną naudodami metodas.
  15. Kokie yra Pydantic naudojimo su FastAPI pranašumai?
  16. „Pydantic“ naudojimo su „FastAPI“ pranašumai apima patikimą duomenų patvirtinimą, automatinį dokumentavimą ir sklandų užklausų tvarkymą.

Apibendrinant galima pasakyti, kad trūkstamų laukų problemą Pydantic modeliuose galima išspręsti užtikrinus teisingą duomenų patvirtinimą ir modelio paleidimą. FastAPI naudojimas kartu su Pydantic siūlo galingą derinį kuriant patikimas API. Tinkamas sąrašų apibrėžimas, įdėtųjų modelių tvarkymas ir UUID bei laiko žymų naudojimas efektyviai padeda valdyti sudėtingas duomenų struktūras. Ši praktika ne tik išsprendžia patvirtinimo klaidas, bet ir pagerina bendrą sistemos patikimumą bei priežiūrą, užtikrina sklandų ir be klaidų veikimą.