fastapi/docs/tr/docs/tutorial/query-params.md

4.9 KiB
Raw Blame History

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ğeri 0
  • limit: değeri 10

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ız
  • limit=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 bir str.
  • skip, varsayılan değeri 0 olan bir int.
  • limit, isteğe bağlı bir int.

/// tip | İpucu

Path Parametreleri{.internal-link target=_blank} ile aynı şekilde Enum'ları da kullanabilirsiniz.

///