0Pricing
FastAPI Backend Development Bootcamp · Ders

İç İçe Modeller ve Özyinelemeli Yapılar

Pydantic ile derin iç içe JSON yapılarını ve özyinelemeli veri modellerini etkili biçimde işleyin.

İç İçe Modeller ve Özyinelemeli Yapılar, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

Understanding Nested Pydantic Models

Gerçek dünya uygulamalarında veriler nadiren düz bir yapıdadır. Genellikle hiyerarşik bir yapıya sahiptirler, yani bazı veri noktaları diğer veri noktalarının koleksiyonlarıdır.

Pydantic'teki iç içe modeller (nested models), bir BaseModel'i diğerinin içine yerleştirerek karmaşık veri yapıları tanımlamanıza olanak tanır. Bu, sağlam ve iyi organize edilmiş veri şemaları oluşturmanıza yardımcı olur.

Defining Your First Nested Model

Bir Address modeli oluşturalım ve ardından bunu bir User modeli içinde alan olarak kullanalım. address: Address ifadesinin bu ikisini nasıl birbirine bağladığına dikkat edin.

from pydantic import BaseModel

class Address(BaseModel):
    street: str
    city: str
    zip_code: str

class User(BaseModel):
    name: str
    email: str
    address: Address

# We'll see it in action next!

Instantiating Nested Pydantic Models

Şimdi User modelimizin bir örneğini oluşturalım. Pydantic, iç içe geçmiş Address verilerini otomatik olarak doğrular ve gerekli tüm alanların mevcut ve doğru türde olduğundan emin olur.

from pydantic import BaseModel

class Address(BaseModel):
    street: str
    city: str
    zip_code: str

class User(BaseModel):
    name: str
    email: str
    address: Address

if __name__ == "__main__":
    user_data = {
        "name": "Alice Wonderland",
        "email": "alice@example.com",
        "address": {
            "street": "123 Rabbit Hole",
            "city": "Wonderland",
            "zip_code": "90210"
        }
    }
    user = User(**user_data)
    print(f"User: {user.name}")
    print(f"Lives in: {user.address.city}")

    # Pydantic will validate nested data:
    try:
        User(name="Bob", email="b@example.com", address={"street": "Main"})
    except Exception as e:
        print(f"\nValidation Error (expected): {e}")

Lists of Nested Pydantic Models

Ayrıca diğer Pydantic modellerinin listeleri olan alanlara da sahip olabilirsiniz. Bu, bir kullanıcının birden fazla öğeye sahip olması veya bir ürünün çeşitli özelliklerinin olması gibi durumlar için yaygındır.

Bunun için typing modülündeki List yapısını kullanırız.

from typing import List
from pydantic import BaseModel

class Skill(BaseModel):
    name: str
    level: int # e.g., 1-5

class Developer(BaseModel):
    name: str
    skills: List[Skill]

if __name__ == "__main__":
    dev_data = {
        "name": "Grace Hopper",
        "skills": [
            {"name": "Python", "level": 5},
            {"name": "SQL", "level": 4},
            {"name": "Algorithms", "level": 3}
        ]
    }
    developer = Developer(**dev_data)
    print(f"Developer: {developer.name}")
    print("Skills:")
    for skill in developer.skills:
        print(f"- {skill.name} (Level: {skill.level})")

Unlocking Recursive Pydantic Models

Bazen veri yapıları daha da karmaşık olabilir: kendilerine başvururlar. Buna özyinelemeli model denir.

  • Yanıtların da yorum olduğu bir yorum bölümü düşünün.
  • Çalışanların, kendileri de çalışan olan yöneticilere sahip olabildiği bir organizasyon şeması.
  • Klasörlerin başka klasörler içerdiği bir dosya sistemi.

Pydantic, bu kendi kendine başvuran yapıları zarif bir şekilde yönetebilir.

The Challenge of Self-Referencing Types

Bir modelin kendisine başvurması gerektiğinde, Python bir "tavuk mu yumurtadan, yumurta mı tavuktan" sorunuyla karşılaşır: Henüz tam olarak tanımlanmamış bir türü nasıl tanımlayabilirsiniz?

Pydantic bunu ileri referanslar (forward references) kullanarak çözer. Pydantic v2'de (ve genellikle v1'de dize değişmezleri ile), tür ipucu (type hint) için modelin adını basitçe bir dize olarak kullanabilirsiniz.

Modeling an Org Chart with Recursion

Bir çalışanın bir manager'a (o da bir Employee'dir) ve bir subordinates (yine Employee'lerdir) listesine sahip olabileceği bir Employee modeli oluşturalım.

Özyinelemeyi (recursion) etkinleştirmek için tür ipucunda 'Employee' ifadesinin dize olarak kullanımına dikkat edin.

from typing import List, Optional
from pydantic import BaseModel

class Employee(BaseModel):
    name: str
    title: str
    # 'Employee' is a forward reference to itself
    manager: Optional['Employee'] = None
    subordinates: List['Employee'] = []

# We'll build an org chart in the next scene!

Building a Recursive Data Structure

Küçük bir organizasyonel hiyerarşi oluşturmak için Employee modelini nasıl örneklendirebileceğiniz aşağıda açıklanmıştır. Pydantic, iç içe geçmiş/özyinelemeli her katmanın doğrulama işlemini yönetir.

from typing import List, Optional
from pydantic import BaseModel

class Employee(BaseModel):
    name: str
    title: str
    manager: Optional['Employee'] = None
    subordinates: List['Employee'] = []

if __name__ == "__main__":
    # Create employees
    ceo = Employee(name="Mr. Boss", title="CEO")
    manager_a = Employee(name="Ms. Lead", title="Manager A", manager=ceo)
    dev_1 = Employee(name="Dev One", title="Developer", manager=manager_a)
    dev_2 = Employee(name="Dev Two", title="Developer", manager=manager_a)

    # Link subordinates (Pydantic can also do this from structured data dicts)
    manager_a.subordinates.extend([dev_1, dev_2])
    ceo.subordinates.append(manager_a)

    print(f"Org Chart: {ceo.name} ({ceo.title})")
    for sub in ceo.subordinates:
        print(f"  - {sub.name} ({sub.title})")
        for dev in sub.subordinates:
            print(f"    - {dev.name} ({dev.title})")

    # You can also parse a dictionary directly:
    org_data = {
        "name": "Top CEO", "title": "CEO",
        "subordinates": [
            {
                "name": "Mid Manager", "title": "Manager",
                "subordinates": [
                    {"name": "Junior Dev", "title": "Developer"}
                ]
            }
        ]
    }
    full_org = Employee(**org_data)
    print(f"\nParsed Org: {full_org.name} -> {full_org.subordinates[0].name} -> {full_org.subordinates[0].subordinates[0].name}")

Validation in Recursive Models

İç içe geçmiş modellerde olduğu gibi, Pydantic'in doğrulama motoru da özyinelemeli yapılarla sorunsuz bir şekilde çalışır. Hiyerarşinin her seviyesinin tanımlanan modele uygun olmasını sağlar ve tür hatalarını veya eksik alanları yakalar.

Bu, karmaşık ve kendi kendine referans veren verilerin işlenmesini çok daha güvenli ve yönetimi kolay hale getirir.

Nested & Recursive Model Check

Pydantic'in güçlü veri modelleme özelliklerini ne kadar anladığınızı kontrol edelim.

Recap: Mastering Complex Data Structures

Pydantic ile karmaşık verileri nasıl yöneteceğinizi öğrendiniz!

  • İç içe modeller (Nested models), daha basit yapılardan karmaşık veri yapıları oluşturmanıza ve her seviyede otomatik doğrulama yapmanıza olanak tanır.
  • Özyinelemeli modeller (Recursive models), organizasyon şemaları veya yorum dizileri gibi hiyerarşiler için mükemmel olan, kendi kendine referans veren veriler tanımlamanızı sağlar.
  • Pydantic'in ileri referansları (forward references) (genellikle dize değişmezleri) kullanması, özyinelemeli türlerin tanımlanmasını kolaylaştırır.

Bu teknikler, yapılandırılmış verilerle etkileşime giren sağlam ve anlaşılır API'ler oluşturmak için temeldir.

Sıkça Sorulan Sorular

“İç İçe Modeller ve Özyinelemeli Yapılar” dersi ücretsiz mi?

Evet — “İç İçe Modeller ve Özyinelemeli Yapılar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

“İç İçe Modeller ve Özyinelemeli Yapılar” dersinde ne öğreneceğim?

Pydantic ile derin iç içe JSON yapılarını ve özyinelemeli veri modellerini etkili biçimde işleyin. FastAPI Backend Development Bootcamp ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“İç İçe Modeller ve Özyinelemeli Yapılar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?

Evet. Her FastAPI Backend Development Bootcamp dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Pydantic Alan Doğrulaması ve Doğrulayıcılar
  2. Özel Veri Türleri ve Ayarlar
  3. İç İçe Modeller ve Özyinelemeli Yapılar
  4. model_dump ve Takma Adlarla Serileştirme
← FastAPI Backend Development Bootcamp Sayfasına Dön