4.9 KiB
Sorgu Parametreleri
Fonksiyonda path parametrelerinin parçası olmayan diğer parametreleri tanımladığınızda, bunlar otomatik olarak "query" parametreleri olarak yorumlanır.
{* ../../docs_src/query_params/tutorial001_py39.py hl[9] *}
Query, bir URL'de ? işaretinden sonra gelen ve & karakterleriyle ayrılan anahtar-değer çiftlerinin kümesidir.
Örneğin, şu URL'de:
http://127.0.0.1:8000/items/?skip=0&limit=10
...query parametreleri şunlardır:
skip: değeri0limit: değeri10
URL'nin bir parçası oldukları için "doğal olarak" string'tirler.
Ancak, bunları Python tipleriyle (yukarıdaki örnekte int olarak) tanımladığınızda, o tipe dönüştürülürler ve o tipe göre doğrulanırlar.
Path parametreleri için geçerli olan aynı süreç query parametreleri için de geçerlidir:
- Editör desteği (tabii ki)
- Veri "parsing"
- Veri doğrulama
- Otomatik dokümantasyon
Varsayılanlar
Query parametreleri path'in sabit bir parçası olmadığından, opsiyonel olabilir ve varsayılan değerlere sahip olabilir.
Yukarıdaki örnekte varsayılan değerleri skip=0 ve limit=10'dur.
Yani şu URL'ye gitmek:
http://127.0.0.1:8000/items/
şuraya gitmekle aynı olur:
http://127.0.0.1:8000/items/?skip=0&limit=10
Ancak örneğin şuraya giderseniz:
http://127.0.0.1:8000/items/?skip=20
Fonksiyonunuzdaki parametre değerleri şöyle olacaktır:
skip=20: çünkü URL'de siz ayarladınızlimit=10: çünkü varsayılan değer oydu
İsteğe bağlı parametreler
Aynı şekilde, varsayılan değerlerini None yaparak isteğe bağlı query parametreleri tanımlayabilirsiniz:
{* ../../docs_src/query_params/tutorial002_py310.py hl[7] *}
Bu durumda, fonksiyon parametresi q isteğe bağlı olur ve varsayılan olarak None olur.
/// check | Ek bilgi
Ayrıca, FastAPI path parametresi olan item_id'nin bir path parametresi olduğunu ve q'nun path olmadığını fark edecek kadar akıllıdır; dolayısıyla bu bir query parametresidir.
///
Sorgu parametresi tip dönüşümü
bool tipleri de tanımlayabilirsiniz, ve bunlar dönüştürülür:
{* ../../docs_src/query_params/tutorial003_py310.py hl[7] *}
Bu durumda, şuraya giderseniz:
http://127.0.0.1:8000/items/foo?short=1
veya
http://127.0.0.1:8000/items/foo?short=True
veya
http://127.0.0.1:8000/items/foo?short=true
veya
http://127.0.0.1:8000/items/foo?short=on
veya
http://127.0.0.1:8000/items/foo?short=yes
veya başka herhangi bir büyük/küçük harf varyasyonunda (tamamı büyük, ilk harf büyük, vb.), fonksiyonunuz short parametresini bool değeri True olarak görecektir. Aksi halde False olarak görür.
Çoklu path ve query parametreleri
Aynı anda birden fazla path parametresi ve query parametresi tanımlayabilirsiniz; FastAPI hangisinin hangisi olduğunu bilir.
Ayrıca bunları belirli bir sırayla tanımlamanız gerekmez.
İsme göre tespit edilirler:
{* ../../docs_src/query_params/tutorial004_py310.py hl[6,8] *}
Zorunlu query parametreleri
Path olmayan parametreler (şimdilik sadece query parametrelerini gördük) için varsayılan değer tanımladığınızda, bu parametre zorunlu olmaz.
Belirli bir değer eklemek istemiyor ama sadece opsiyonel olmasını istiyorsanız, varsayılanı None olarak ayarlayın.
Ancak bir query parametresini zorunlu yapmak istediğinizde, herhangi bir varsayılan değer tanımlamamanız yeterlidir:
{* ../../docs_src/query_params/tutorial005_py39.py hl[6:7] *}
Burada query parametresi needy, str tipinde zorunlu bir query parametresidir.
Tarayıcınızda şöyle bir URL açarsanız:
http://127.0.0.1:8000/items/foo-item
...zorunlu needy parametresini eklemeden, şuna benzer bir hata görürsünüz:
{
"detail": [
{
"type": "missing",
"loc": [
"query",
"needy"
],
"msg": "Field required",
"input": null
}
]
}
needy zorunlu bir parametre olduğundan, URL'de ayarlamanız gerekir:
http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
...bu çalışır:
{
"item_id": "foo-item",
"needy": "sooooneedy"
}
Ve elbette, bazı parametreleri zorunlu, bazılarını varsayılan değerli, bazılarını da tamamen isteğe bağlı olarak tanımlayabilirsiniz:
{* ../../docs_src/query_params/tutorial006_py310.py hl[8] *}
Bu durumda, 3 tane query parametresi vardır:
needy, zorunlu birstr.skip, varsayılan değeri0olan birint.limit, isteğe bağlı birint.
/// tip | İpucu
Path Parametreleri{.internal-link target=_blank} ile aynı şekilde Enum'ları da kullanabilirsiniz.
///