4.7 KiB
Dataclass Kullanımı
FastAPI, Pydantic üzerine inşa edilmiştir ve request/response tanımlamak için Pydantic model'lerini nasıl kullanacağınızı gösteriyordum.
Ancak FastAPI, dataclasses kullanmayı da aynı şekilde destekler:
{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
Bu destek hâlâ Pydantic sayesinde vardır; çünkü Pydantic, dataclasses için dahili destek sunar.
Yani yukarıdaki kod Pydantic'i doğrudan kullanmasa bile, FastAPI bu standart dataclass'ları Pydantic'in kendi dataclass biçimine dönüştürmek için Pydantic'i kullanmaktadır.
Ve elbette aynı özellikleri destekler:
- veri doğrulama (data validation)
- veri serileştirme (data serialization)
- veri dokümantasyonu (data documentation), vb.
Bu, Pydantic model'lerinde olduğu gibi çalışır. Aslında arka planda da aynı şekilde, Pydantic kullanılarak yapılır.
/// info | Bilgi
Dataclass'ların, Pydantic model'lerinin yapabildiği her şeyi yapamadığını unutmayın.
Bu yüzden yine de Pydantic model'lerini kullanmanız gerekebilir.
Ancak elinizde zaten bir sürü dataclass varsa, bunları FastAPI ile bir web API'yi beslemek için kullanmak güzel bir numaradır. 🤓
///
response_model İçinde Dataclass'lar
response_model parametresinde dataclasses da kullanabilirsiniz:
{* ../../docs_src/dataclasses_/tutorial002_py310.py hl[1,6:12,18] *}
Dataclass otomatik olarak bir Pydantic dataclass'ına dönüştürülür.
Bu sayede şeması API docs kullanıcı arayüzünde görünür:
İç İçe Veri Yapılarında Dataclass'lar
İç içe veri yapıları oluşturmak için dataclasses ile diğer type annotation'ları da birleştirebilirsiniz.
Bazı durumlarda yine de Pydantic'in dataclasses sürümünü kullanmanız gerekebilir. Örneğin, otomatik oluşturulan API dokümantasyonunda hata alıyorsanız.
Bu durumda standart dataclasses yerine, drop-in replacement olan pydantic.dataclasses kullanabilirsiniz:
{* ../../docs_src/dataclasses_/tutorial003_py310.py hl[1,4,7:10,13:16,22:24,27] *}
-
fieldhâlâ standartdataclassesiçinden import edilir. -
pydantic.dataclasses,dataclassesiçin bir drop-in replacement'tır. -
Authordataclass'ı,Itemdataclass'larından oluşan bir liste içerir. -
Authordataclass'ı,response_modelparametresi olarak kullanılır. -
Request body olarak dataclass'larla birlikte diğer standart type annotation'ları da kullanabilirsiniz.
Bu örnekte,
Itemdataclass'larından oluşan bir listedir. -
Burada
itemsiçeren bir dictionary döndürüyoruz;itemsbir dataclass listesi.FastAPI, veriyi JSON'a serializing etmeyi yine başarır.
-
Burada
response_model,Authordataclass'larından oluşan bir listenin type annotation'ını kullanıyor.Yine
dataclassesile standart type annotation'ları birleştirebilirsiniz. -
Bu path operation function,
async defyerine normaldefkullanıyor.Her zaman olduğu gibi, FastAPI'de ihtiyaca göre
defveasync def’i birlikte kullanabilirsiniz.Hangisini ne zaman kullanmanız gerektiğine dair hızlı bir hatırlatma isterseniz,
asyncveawait{.internal-link target=_blank} dokümanındaki "In a hurry?" bölümüne bakın. -
Bu path operation function dataclass döndürmüyor (isterse döndürebilir), onun yerine dahili verilerle bir dictionary listesi döndürüyor.
FastAPI, response'u dönüştürmek için (dataclass'ları içeren)
response_modelparametresini kullanacaktır.
Karmaşık veri yapıları oluşturmak için dataclasses ile diğer type annotation'ları pek çok farklı kombinasyonda birleştirebilirsiniz.
Daha spesifik ayrıntılar için yukarıdaki kod içi annotation ipuçlarına bakın.
Daha Fazla Öğrenin
dataclasses'ı diğer Pydantic model'leriyle de birleştirebilir, onlardan kalıtım alabilir, kendi model'lerinize dahil edebilirsiniz, vb.
Daha fazlası için Pydantic'in dataclasses dokümantasyonuna bakın.
Sürüm
Bu özellik FastAPI 0.67.0 sürümünden beri mevcuttur. 🔖