Özel Veri Türleri ve Ayarlar
Özel Pydantic veri türleri tanımlayın ve Pydantic'in `BaseSettings` özelliğini kullanarak uygulama ayarlarını yönetin.
Özel Veri Türleri ve Ayarlar, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 2. 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.
Welcome to Custom Types!
Pydantic veri doğrulaması için harikadır, ancak bazen yerleşik türlerinin ötesinde doğrulamaya ihtiyaç duyarsınız.
- Özel Veri Türleri, verileriniz için kendi kurallarınızı tanımlamanıza olanak tanır.
- Bu, verilerinizin belirli biçimlere veya iş mantığına uymasını sağlar.
- Bunu, Pydantic'in gücünü benzersiz ihtiyaçlar için genişletmek olarak düşünebilirsiniz.
`Annotated` for Custom Validation
Pydantic v2, özel türler oluşturmak için Python'ın typing.Annotated yapısını doğrulayıcı işlevlerle birlikte kullanır.
Annotated: Bir tür ipucuna meta veri ekler.BeforeValidator: Bir işlevi Pydantic'in standart doğrulamasından önce çalıştırır.- Bu, girdi verilerini atanmadan önce dönüştürmenize veya doğrulamanıza olanak tanır.
Crafting a `CapitalizedString`
İlk harfinin her zaman büyük harf olmasını sağlayan CapitalizedString adında özel bir tür oluşturalım.
Doğrulayıcı fonksiyonumuz bu kuralı kontrol edecektir. Eğer metin büyük harfle başlamıyorsa, bir hata verecektir.
Using Your Custom Type
Yeni CapitalizedString türümüzü bir Pydantic modelinde nasıl tanımlayıp kullanacağınız aşağıda açıklanmıştır. Doğrulama hatasını görmek için name değerini küçük harfle başlayacak şekilde değiştirmeyi deneyin!
from typing import Annotated
from pydantic import BaseModel, BeforeValidator, ValidationError
def validate_capitalized(v: str) -> str:
if not isinstance(v, str):
raise TypeError("String required")
if v and not v[0].isupper():
raise ValueError("Must start with uppercase")
return v
CapitalizedString = Annotated[str, BeforeValidator(validate_capitalized)]
class Product(BaseModel):
name: CapitalizedString
price: float
if __name__ == "__main__":
try:
product1 = Product(name="Laptop", price=1200.50)
print(f"Product: {product1.name}")
# This will raise a ValidationError
# product2 = Product(name="keyboard", price=75.00)
except ValidationError as e:
print(f"Validation Error: {e}")Manage Settings with `BaseSettings`
Uygulama ayarları (veritabanı URL'leri, API anahtarları gibi) genellikle geliştirme ve üretim ortamları arasında değişiklik gösterir.
pydantic-settings kütüphanesinden gelen BaseSettings, bu yapılandırmaları kolayca yönetmek için tasarlanmıştır. Ayarları şu kaynaklardan otomatik olarak yükler:
- Ortam değişkenleri
.envdosyaları- Varsayılan değerler
Default Settings in Action
Ayarlarınızı BaseSettings sınıfından türetilen bir sınıfın öznitelikleri olarak tanımlayın. Pydantic geri kalanını halleder ve başka bir şey belirtilmediği takdirde varsayılan değerleri sağlar.
from pydantic_settings import BaseSettings
class AppConfig(BaseSettings):
app_name: str = "My FastAPI App"
debug_mode: bool = False
version: str = "1.0.0"
if __name__ == "__main__":
settings = AppConfig()
print(f"App Name: {settings.app_name}")
print(f"Debug Mode: {settings.debug_mode}")
print(f"Version: {settings.version}")Loading from Environment Variables
BaseSettings, ayar adlarınızla eşleşen (büyük/küçük harf duyarsız) ortam değişkenlerini otomatik olarak arar.
Bu örnekte, Pydantic'in varsayılanı geçersiz kılarak bunu nasıl algıladığını göstermek için geçici olarak bir ortam değişkeni ayarlıyoruz.
import os
from pydantic_settings import BaseSettings
class AppConfig(BaseSettings):
app_name: str = "Default App"
database_url: str = "sqlite:///./test.db"
if __name__ == "__main__":
print("--- Without env var ---")
settings_default = AppConfig()
print(f"App Name: {settings_default.app_name}")
# Simulate setting an environment variable
os.environ["APP_NAME"] = "Production App"
os.environ["DATABASE_URL"] = "postgresql://user:pass@host:5432/db"
print("\n--- With env var ---")
settings_env = AppConfig()
print(f"App Name: {settings_env.app_name}")
print(f"DB URL: {settings_env.database_url}")
# Clean up the environment variable for subsequent runs
del os.environ["APP_NAME"]
del os.environ["DATABASE_URL"]Leveraging `.env` Files
Yerel geliştirme için ayarları proje kök dizininizdeki bir .env dosyasında (örneğin: .env) saklamak yaygın bir uygulamadır.
BaseSettings sınıfınızda SettingsConfigDict(env_file='.env') kullanarak ayarların bu dosyadan yüklenmesini yapılandırabilirsiniz.
Örnek .env içeriği:APP_NAME="Dev App"
API_KEY="your_dev_api_key"
from pydantic_settings import BaseSettings, SettingsConfigDict
class ProjectSettings(BaseSettings):
model_config = SettingsConfigDict(env_file='.env', extra='ignore')
app_name: str = "Default Project"
api_key: str = "default_key"
# To make this runnable, you would need python-dotenv installed
# and an actual .env file in the same directory as the script.
# For this lesson, we show the setup.
# Example usage (if .env existed and python-dotenv was active):
# if __name__ == "__main__":
# settings = ProjectSettings()
# print(f"App Name: {settings.app_name}")
# print(f"API Key: {settings.api_key}")
Understanding Settings Priority
BaseSettings bir değer ararken belirli bir öncelik sırasını takip eder:
- Ortam değişkenleri (en yüksek öncelik)
.envdosyası değişkenleriBaseSettingssınıfında tanımlanan varsayılan değerler (en düşük öncelik)
Bu, ortam değişkenlerinin yerel .env dosyalarını ve sınıf varsayılanlarını her zaman geçersiz kılabilmesini sağlar; bu da dağıtım için kritik öneme sahiptir.
Test Your Knowledge!
Pydantic'in BaseSettings yapısı ve özel türler hakkında aşağıdakilerden hangileri doğrudur?
Recap: Custom Types & Settings
Harika bir iş çıkardınız! Pydantic'in doğrulama özelliklerini genişleterek Annotated ve BeforeValidator ile nasıl güçlü özel veri türleri oluşturacağınızı öğrendiniz.
Ayrıca, BaseSettings ile sağlam uygulama yapılandırmasında ustalaştınız ve değerleri varsayılanlardan, .env dosyalarından ve ortam değişkenlerinden net öncelik kurallarıyla nasıl yükleyeceğinizi anladınız.
Bu araçlar, esnek ve sürdürülebilir FastAPI uygulamaları oluşturmak için çok önemlidir!
Sıkça Sorulan Sorular
“Özel Veri Türleri ve Ayarlar” dersi ücretsiz mi?
Evet — “Özel Veri Türleri ve Ayarlar” 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.
“Özel Veri Türleri ve Ayarlar” dersinde ne öğreneceğim?
Özel Pydantic veri türleri tanımlayın ve Pydantic'in `BaseSettings` özelliğini kullanarak uygulama ayarlarını yönetin. 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 2. dersidir.
“Özel Veri Türleri ve Ayarlar” 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