3.0 KiB
Form Verisi
JSON yerine form alanlarını almanız gerektiğinde Form kullanabilirsiniz.
/// info | Bilgi
Formları kullanmak için önce python-multipart paketini kurun.
Bir virtual environment{.internal-link target=_blank} oluşturduğunuzdan, onu etkinleştirdiğinizden emin olun ve ardından örneğin şöyle kurun:
$ pip install python-multipart
///
Form'u Import Edin
Form'u fastapi'den import edin:
{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[3] *}
Form Parametrelerini Tanımlayın
Form parametrelerini Body veya Query için yaptığınız gibi oluşturun:
{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[9] *}
Örneğin OAuth2 spesifikasyonunun kullanılabileceği ("password flow" olarak adlandırılan) yollardan birinde, form alanları olarak bir username ve password göndermek zorunludur.
spec, alanların adının tam olarak username ve password olmasını ve JSON değil form alanları olarak gönderilmesini gerektirir.
Form ile Body (ve Query, Path, Cookie) ile yaptığınız aynı konfigürasyonları tanımlayabilirsiniz; validasyon, örnekler, alias (örn. username yerine user-name) vb. dahil.
/// info | Bilgi
Form, doğrudan Body'den miras alan bir sınıftır.
///
/// tip | İpucu
Form gövdelerini tanımlamak için Form'u açıkça kullanmanız gerekir; çünkü bunu yapmazsanız parametreler query parametreleri veya body (JSON) parametreleri olarak yorumlanır.
///
"Form Alanları" Hakkında
HTML formlarının (<form></form>) verileri sunucuya gönderme şekli normalde bu veri için JSON'dan farklı "özel" bir encoding kullanır.
FastAPI bu veriyi JSON yerine doğru yerden okuyacaktır.
/// note | Teknik Detaylar
Formlardan gelen veri normalde "media type" application/x-www-form-urlencoded kullanılarak encode edilir.
Ancak form dosyalar içerdiğinde multipart/form-data olarak encode edilir. Dosyaları ele almayı bir sonraki bölümde okuyacaksınız.
Bu encoding'ler ve form alanları hakkında daha fazla okumak isterseniz, MDN web docs for POST sayfasına gidin.
///
/// warning | Uyarı
Bir path operation içinde birden fazla Form parametresi tanımlayabilirsiniz, ancak JSON olarak almayı beklediğiniz Body alanlarını da ayrıca tanımlayamazsınız; çünkü bu durumda request'in body'si application/json yerine application/x-www-form-urlencoded ile encode edilmiş olur.
Bu FastAPI'ın bir kısıtlaması değildir, HTTP protokolünün bir parçasıdır.
///
Özet
Form verisi girdi parametrelerini tanımlamak için Form kullanın.