Pydantic Alan Doğrulaması ve Doğrulayıcılar
Gelişmiş alan doğrulama seçeneklerini keşfedin ve karmaşık iş kuralları için özel doğrulayıcılar oluşturun.
Pydantic Alan Doğrulaması ve Doğrulayıcılar, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 1. 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.
Why Validate with Pydantic?
Pydantic, modellerinizdeki veri türlerini otomatik olarak doğrular. Ancak bazen, kullanıcı adı için minimum uzunluk veya pozitif bir yaş değeri gibi daha özel kurallara ihtiyaç duyarsınız.
İşte alan doğrulama (field validation) ve özel doğrulayıcılar (custom validators) tam bu noktada devreye girer! Verilerinizin uygulamanızın tüm iş kurallarına uymasını sağlayarak API'lerinizi daha güvenilir hale getirirler.
Using Pydantic's `Field` Function
Pydantic'in Field fonksiyonu, model alanlarına ekstra doğrulama kuralları ve meta veriler eklemenize olanak tanır. pydantic kütüphanesinden içe aktarılır. Bir metin için nasıl minimum ve maksimum uzunluk zorunluluğu getirebileceğimize bakalım.
from pydantic import BaseModel, Field
class User(BaseModel):
username: str = Field(min_length=3, max_length=15)
age: int
# Valid
try:
user1 = User(username="coddy", age=25)
print(f"Valid username: {user1.username}")
except Exception as e:
print(e)
# Invalid username (too short)
try:
user2 = User(username="c", age=30)
except Exception as e:
print(f"Error: {e}")Numeric Field Rules
Sayılar için Field, güçlü karşılaştırma doğrulayıcıları sunar:
gt(büyüktür)lt(küçüktür)ge(büyük veya eşittir)le(küçük veya eşittir)
Bunları sayısal veriler için geçerli aralıklar tanımlamak ve değerlerin her zaman beklenen sınırlar içinde kalmasını sağlamak için kullanın.
from pydantic import BaseModel, Field
class Product(BaseModel):
name: str
price: float = Field(gt=0, le=1000) # Price > 0 and <= 1000
stock: int = Field(ge=0) # Stock >= 0
# Valid
try:
product1 = Product(name="Book", price=19.99, stock=100)
print(f"{product1.name} price: {product1.price}")
except Exception as e:
print(e)
# Invalid price (negative)
try:
product2 = Product(name="Pen", price=-5.0, stock=50)
except Exception as e:
print(f"Error: {e}")Regex for Field Validation
Field içindeki pattern bağımsız değişkeni, dize alanlarını bir normal ifadeye (regular expression) göre doğrulamanıza olanak tanır. Bu, ürün kodları, seri numaraları veya karmaşık tanımlayıcılar gibi belirli biçimleri zorunlu kılmak için harikadır.
from pydantic import BaseModel, Field
class ItemCode(BaseModel):
# Code must be three uppercase letters, a hyphen, then four digits
code: str = Field(pattern=r"^[A-Z]{3}-\d{4}$") # e.g., ABC-1234
# Valid
try:
item1 = ItemCode(code="XYZ-9876")
print(f"Valid code: {item1.code}")
except Exception as e:
print(f"Error: {e}")
# Invalid format (lowercase letters)
try:
item2 = ItemCode(code="abc-1234")
except Exception as e:
print(f"Error: {e}")Crafting Custom Validators
Field birçok yaygın durumu kapsasa da, bazen özel Python kodu gerektiren daha karmaşık doğrulama mantığına ihtiyaç duyarsınız. Pydantic'in @validator dekoratörü tam bu noktada devreye girer.
BaseModel'iniz içinde bir metot tanımlayıp, bu metodu @validator('alan_adı') ile dekore ederek belirli bir alana özel mantık uygulayabilirsiniz.
Custom Logic for Fields
Bir password alanının en az bir rakam içermesi gibi belirli karmaşıklık gereksinimlerini karşıladığından emin olmak için özel bir doğrulayıcı oluşturalım. Doğrulayıcı işlevi, alanın değerini bir argüman olarak alır.
from pydantic import BaseModel, validator
import re
class UserAuth(BaseModel):
username: str
password: str
@validator('password')
def password_has_digit(cls, v):
if not re.search(r"\d", v):
raise ValueError('password must contain at least one digit')
return v
# Valid
try:
user1 = UserAuth(username="coder", password="MySecureP@ss1")
print(f"Password OK for {user1.username}")
except Exception as e:
print(f"Error: {e}")
# Invalid password (no digits)
try:
user2 = UserAuth(username="test", password="NoDigitsHere!")
except Exception as e:
print(f"Error: {e}")Data Transformation with `pre=True`
Bazen, gelen verileri Pydantic'in standart tip doğrulaması veya diğer doğrulayıcılar çalışmadan önce dönüştürmeniz veya temizlemeniz gerekir. Bunun için @validator('field_name', pre=True) kullanın.
Yaygın bir kullanım durumu, içerik tutarlılığını sağlamak için doğrulamadan önce boşlukları kaldırmak veya büyük/küçük harf dönüşümü yapmaktır.
from pydantic import BaseModel, validator
class SearchQuery(BaseModel):
query: str
@validator('query', pre=True)
def strip_whitespace(cls, v):
if isinstance(v, str):
return v.strip()
return v # Pydantic will handle type validation later
# Input with leading/trailing spaces
query1 = SearchQuery(query=" python tutorial ")
print(f"Cleaned query: '{query1.query}'")
# Input without spaces
query2 = SearchQuery(query="fastapi")
print(f"Cleaned query: '{query2.query}'")Stacking Field Validators
Tek bir alana birden fazla @validator dekoratörü uygulayabilirsiniz. Bunlar, tanımlandıkları sırayla çalıştırılır. Bu, doğrulama mantığını birbirine bağlamanıza olanak tanıyarak modellerinizi sağlamlaştırır.
Liste alanları için, doğrulayıcıyı listedeki her bir öğeye uygulamak üzere each_item=True kullanın.
from pydantic import BaseModel, validator
class TagList(BaseModel):
tags: list[str]
@validator('tags', each_item=True)
def tag_must_be_lowercase(cls, v):
if v != v.lower():
raise ValueError('tag must be lowercase')
return v
@validator('tags', each_item=True)
def tag_min_length(cls, v):
if len(v) < 2:
raise ValueError('tag must be at least 2 chars')
return v
# Valid
try:
tags1 = TagList(tags=["python", "fastapi"])
print(f"Tags OK: {tags1.tags}")
except Exception as e:
print(f"Error: {e}")
# Invalid (uppercase and too short)
try:
tags2 = TagList(tags=["PY", "a"])
except Exception as e:
print(f"Error: {e}")Cross-Field Validation with Root Validators
Bazen bir alanın geçerliliği, başka bir alanın (veya birden fazlasının) değerine bağlıdır. Buna çapraz alan doğrulaması denir. Pydantic'in @root_validator özelliği, tüm modelin veri sözlüğünü bir kerede doğrulamanıza olanak tanır.
Bu, bir start_date değerinin end_date değerinden önce olduğundan emin olmak veya password ile confirm_password alanlarının eşleşmesini sağlamak gibi senaryolar için kullanışlıdır.
Root Validator in Action
@root_validator, tüm modelin verilerini bir sözlük olarak alır. Alan bazlı doğrulamadan önce veya sonra çalıştırmak için pre=True veya pre=False (varsayılan) kullanabilirsiniz. Alanlar arası kontroller için genellikle doğrulama sonrası (varsayılan) tercih edilir.
from pydantic import BaseModel, root_validator, ValidationError
class Registration(BaseModel):
email: str
password: str
password_confirm: str
@root_validator()
def passwords_match(cls, values):
pw1, pw2 = values.get('password'), values.get('password_confirm')
if pw1 is not None and pw2 is not None and pw1 != pw2:
raise ValueError('passwords do not match')
return values
# Valid
try:
reg1 = Registration(email="a@b.com", password="P@ssword1", password_confirm="P@ssword1")
print("Registration valid!")
except ValidationError as e:
print(f"Error: {e}")
# Invalid (passwords don't match)
try:
reg2 = Registration(email="x@y.com", password="P@ssword1", password_confirm="P@ssword2")
except ValidationError as e:
print(f"Error: {e}")Validation Checkpoint
Bir kullanıcı profili için aşağıdaki Pydantic modelini düşünün:
from pydantic import BaseModel, Field, validator
import re
class UserProfile(BaseModel):
username: str = Field(min_length=5, max_length=20)
email: str
age: int = Field(gt=18)
bio: str = ""
@validator('email')
def validate_email_format(cls, v):
if not re.match(r"[^@]+@[^@]+\.[^@]+", v):
raise ValueError('Invalid email format')
return vAşağıdaki JSON girişlerinden hangisi UserProfile için geçerli olur?
Recap: Mastering Validation
Veri modellerinizi gerçekten sağlam hale getirmeyi öğrendiniz!
Field: Min/maks uzunluk, sayısal aralıklar ve regex desenleri gibi yerleşik kurallar için.@validator: Bireysel alanlar için özel mantık uygulamak amacıyla, erken dönüşüm içinpre=Trueseçeneği ile birlikte.@root_validator: Birden fazla alana bağlı olan karmaşık, alanlar arası doğrulama işlemleri için.
Bu araçlar, FastAPI uygulamalarınızda veri bütünlüğünü sağlayarak kesin kurallar tanımlamanıza olanak tanır. Çok daha güvenilir API'ler oluşturmak için pratik yapmaya devam edin!
Sıkça Sorulan Sorular
“Pydantic Alan Doğrulaması ve Doğrulayıcılar” dersi ücretsiz mi?
Evet — “Pydantic Alan Doğrulaması ve Doğrulayıcı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.
“Pydantic Alan Doğrulaması ve Doğrulayıcılar” dersinde ne öğreneceğim?
Gelişmiş alan doğrulama seçeneklerini keşfedin ve karmaşık iş kuralları için özel doğrulayıcılar oluşturun. 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 1. dersidir.
“Pydantic Alan Doğrulaması ve Doğrulayıcı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
- Pydantic Alan Doğrulaması ve Doğrulayıcılar
- Özel Veri Türleri ve Ayarlar
- İç İçe Modeller ve Özyinelemeli Yapılar
- model_dump ve Takma Adlarla Serileştirme