CodeBlanks Logo Icon CodeBlanks

Pydantic model

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

main.py
# 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

main.py
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

Soru
from pydantic import BaseModel

class Item(____):
    name: str
    price: float
Cevap
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

Açıklama: class Item(BaseModel) ile model tanımlanır.

İleri seviye bölümündeki tüm dersler