Daugelyje šiuolaikinių „Python“ programų, ypač tų, kurie tvarko gaunamus duomenis (pvz., JSON naudingosios apkrovos iš API), užtikrinant, kad duomenys yra pagrįsti, išsamūs ir tinkamai įvesti. Pydantic yra galinga biblioteka, leidžianti apibrėžti jūsų duomenų modelius, naudojant standartines „Python“ tipo užuominas ir tada automatiškai patvirtina visus gaunamus duomenis prieš šiuos modelius. Šiame pavyzdyje parodysime, kaip modeliuoti tipišką naudojimo atvejį: vartotojas, pateikiantis produktų užsakymą. Mes naudosime „Pydantic“, kad apibrėžtume vartotojo, produkto ir užsakymų modelius, užtikrindami, kad tokie duomenys kaip el. Laiškai, kainos, kiekiai ir vartotojo informacija laikytųsi mūsų nurodytų apribojimų.
1 žingsnis: įdiekite priklausomybes
pip install pydantic
pip install pydantic(email)
Norėdami įdiegti pagrindinę biblioteką, naudokite „PIP“ diegimo „Pydantic“, kad būtų galima patvirtinti duomenis su „Python“ tipo užuominomis. Be to, paleiskite „PIP Install Pydantic“ (el. Pašto adresą), kad gautumėte įmontuotų el. Pašto patvirtinimo funkcijų.
2 veiksmas: apibrėžkite „Pydantic“ modelius (vartotojas, produktas ir užsakymas)
from typing import List, Optional
from pydantic import BaseModel, Field, EmailStr, conint, ValidationError
# Define the models
class User(BaseModel):
name: str = Field(..., min_length=1, max_length=50, description="User's full name")
email: EmailStr = Field(..., description="User's email address, validated by Pydantic")
age: Optional(conint(ge=0, le=120)) = Field(None, description="Optional age with a realistic range")
phone_number: Optional(str) = Field(None, pattern=r'^\+?(1-9)\d{1,14}$', description="Optional phone number, E.164 format")
class Product(BaseModel):
name: str = Field(..., min_length=1, max_length=100)
price: float = Field(..., gt=0, description="Price must be greater than zero")
quantity: conint(gt=0) = Field(..., description="Quantity must be greater than zero")
class Order(BaseModel):
order_id: int = Field(..., gt=0, description="Order ID must be a positive integer")
user: User
products: List(Product) = Field(..., description="A list of products in the order")
# Computed property
@property
def total_cost(self) -> float:
return sum(product.price * product.quantity for product in self.products)
Pagal aukščiau pateiktą kodą šie trys „Pydantic“ modeliai, vartotojas, produktas ir tvarka pateikia struktūrizuotą, patvirtintą programų duomenų tvarkymo metodą. Vartotojas vykdo pavadinimo, el. Pašto, pasirenkamo amžiaus ir pasirenkamo telefono numerio, atitinkančio modelį, apribojimus. Produktas užtikrina galiojantį vardo ilgį, teigiamą kainą ir ne nulinį kiekį. Galiausiai užsakymas susieja vartotoją ir produktus kartu apskaičiuodamas visas užsakymo išlaidas.
3 žingsnis: Įdiekite patvirtinimą pagrindinėje () funkcijoje
def main():
# Example of a valid user dictionary
user_data = {
"name": "Jane Doe",
"email": "jane.doe@example.com",
"age": 30,
"phone_number": "+1234567890"
}
# Example of product data
products_data = (
{"name": "Keyboard", "price": 49.99, "quantity": 1},
{"name": "Mouse", "price": 19.99, "quantity": 2}
)
# Combine user and products in an order
order_data = {
"order_id": 101,
"user": user_data,
"products": products_data
}
try:
# Instantiate models to trigger validation
valid_user = User(**user_data)
print("User Model:", valid_user)
valid_products = (Product(**pd) for pd in products_data)
print("Product Models:", valid_products)
valid_order = Order(**order_data)
print("Order Model:", valid_order)
print(f"Total cost of the order: {valid_order.total_cost}")
except ValidationError as e:
print("Validation Error:", e)
Dabar ši pagrindinė () funkcija imituoja vartotojo ir kelių produktų duomenų gavimą, tada sukuria ir patvirtina atitinkamą vartotojo, produkto ir užsakymo egzempliorių. Tai parodo, kaip „Pydantic“ iškelia „ValidationError“, jei kokie nors duomenys nepavyksta patvirtinti, ir atspausdina patvirtintus modelius ir apskaičiuotas bendras išlaidas kitaip.
4 žingsnis: vykdykite programą
# Run the main() function
main()
Mes skambiname pagrindiniam (), kad įvykdytume demonstraciją, kuri patvirtina mūsų vartotojo, produkto ir užsakymo duomenų pavyzdį. Atlikus funkciją, jis išspausdina patvirtintus modelius ir visas klaidas, jei duomenys nepavyksta patvirtinti.
Išvestis
User Model: name="Jane Doe" email="jane.doe@example.com" age=30 phone_number="+1234567890" Product Models: (Product(name="Keyboard", price=49.99, quantity=1), Product(name="Mouse", price=19.99, quantity=2)) Order Model: order_id=101 user=User(name="Jane Doe", email="jane.doe@example.com", age=30, phone_number="+1234567890") products=(Product(name="Keyboard", price=49.99, quantity=1), Product(name="Mouse", price=19.99, quantity=2)) Total cost of the order: 89.97
Kodo išvestis bus tokia, kaip aukščiau.
Šiame pavyzdyje mes pademonstravome, kaip „Pydantic“ gali apibrėžti ir patvirtinti vartotojo, produkto ir užsakymo duomenų modelius realaus pasaulio darbo eigoje. „Pydantic“ užtikrina, kad visi šie modeliai pateikiami duomenys būtų teisingi, nurodant lauko tipus, apribojimus ir pasirinktinius patvirtinimus. Tai padeda anksti sugauti klaidas, supaprastinti kodo logiką ir padidinti duomenų reikalaujančių programų patikimumą.
Be to, nepamirškite sekti mūsų „Twitter“ ir prisijunkite prie mūsų „Telegram“ kanalas ir „LinkedIn GrOUP. Nepamirškite prisijungti prie mūsų 75K+ ml subreddit.
🚨 Rekomenduojama atvirojo kodo AI platforma: „„ Intellagent “yra atvirojo kodo daugialypės terpės sistema, skirta įvertinti sudėtingą pokalbio AI sistemą“ (Paaukštintas)
Asif Razzaq yra „MarkTechPost Media Inc“ generalinis direktorius. Kaip vizionierius verslininkas ir inžinierius, ASIF yra įsipareigojęs išnaudoti dirbtinio intelekto potencialą socialiniam gėrybei. Naujausias jo siekis yra dirbtinio intelekto žiniasklaidos platformos „MarkTechPost“, kuri išsiskiria išsamia mašininio mokymosi ir giluminio mokymosi naujienų, kuri yra techniškai pagrįsta, ir lengvai suprantama plačiai auditorijai. Platforma gali pasigirti daugiau nei 2 milijonai mėnesinių peržiūrų, parodydama jos populiarumą tarp auditorijos.
✅ (rekomenduojama) Prisijunkite prie mūsų telegramos kanalo