Pydantic model
- Python kursu
- İleri seviye
- Ders 51/83
- 5 dk
pydantic.BaseModel ile istek gövdesini öğrenirsin.
Pydantic model
FastAPI, istek gövdesini doğrulamak için pydantic.BaseModel kullanır. Bir model sınıfı tanımlar, alanlara tür verirsin; FastAPI gövdeyi otomatik doğrular ve işleve parametre olarak geçirir.
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
def create_item(item: Item):
return itemİşlev parametresi item: Item yazınca FastAPI gövdeyi bir Item örneğine çevirir. Hatalı gövde gelirse 422 yanıtı döner.
doğrulama
Pydantic modeli, gövdeyi otomatik doğrular. Tür uyumsuzsa ya da zorunlu alan eksikse FastAPI 422 durum koduyla ayrıntılı bir hata yanıtı döner.
# Item(name: str, price: float)
# Gövde: {"name": "kalem", "price": 5.5} -> doğrulanır
# Gövde: {"name": "kalem"} -> 422 (price eksik)Doğrulama başarılı olursa işlev çağrılır; parametre bir Item örneğidir ve item.name, item.price gibi alanlarla kullanılır.
Uygulama Pydantic modeliyle POST yolu
from fastapi import FastAPI, from pydantic import BaseModel ve from fastapi.testclient import TestClient ile başla. app = FastAPI() tanımla. class Item(BaseModel): içinde name: str ve price: float alanlarını ekle. @app.post("/items/") dekoratörüyle def create_item(item: Item): tanımla ve return item yapsın. client = TestClient(app) ile istemci oluştur. body = '{"name": "kalem", "price": 5.5}' tanımla. resp = client.post("/items/", content=body.encode(), headers={"content-type": "application/json"}) ile POST isteği yap. print(resp.text) ile yanıtı yazdır.
Başlangıç kodu
# fastapi'den FastAPI'yi içe aktar
# pydantic'den BaseModel'i içe aktar
# TestClient'ı içe aktar
# app'i tanımla
# Item modelini tanımla (name, price alanları)
# '/items/' yoluna bir post işlevi ekle (item parametresi ile)
# TestClient ile istemci oluştur, yapısal veri gövdesiyle post isteği yapÖrnek çözüm
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.testclient import TestClient
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
def create_item(item: Item):
return item
client = TestClient(app)
body = '{"name": "kalem", "price": 5.5}'
resp = client.post("/items/", content=body.encode(), headers={"content-type": "application/json"})
print(resp.text)Beklenen çıktı
{"name":"kalem","price":5.5}
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Pydantic model kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
BaseModel |
Model temel sınıfı |
name: str |
Alan tanımıdır |
item: Item |
Parametre türüdür |
@app.post |
POST yolu tanımlar |
2 Pydantic modeline uymayan gövde gelirse hangi durum kodu döner?
- 200
- 404
- 422 Doğru cevap
- 500
Açıklama: Doğrulama hatasında 422 durum kodu döner.
3 BaseModel türetmesini tamamla
from pydantic import BaseModel
class Item(____):
name: str
price: float
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
Açıklama: class Item(BaseModel) ile model tanımlanır.