11 KiB
Yol Parametreleri ve Sayısal Doğrulamalar
Query
ifadesi ile sorgu parametreleri için tanımladığınız doğrulamalar ve üstverileri aynı şekilde Path
ifadesi için de tanımlayabilirsiniz.
Path İfadesini İçeri Aktaralım
Öncelikle, fastapi
paketinden Path
ifadesini ve sonra Annotated
ifadesini içeri aktaralım:
=== "Python 3.10+"
```Python hl_lines="1 3"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py!}
```
=== "Python 3.9+"
```Python hl_lines="1 3"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_an_py39.py!}
```
=== "Python 3.8+"
```Python hl_lines="3-4"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_an.py!}
```
=== "Python 3.10+ Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="1"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_py310.py!}
```
=== "Python 3.8+ Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="3"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001.py!}
```
!!! info "Bilgi"
FastAPI, 0.95.0 versiyonu ile birlikte Annotated
ifadesini desteklemeye (ve önermeye) başladı.
Daha eski bir sürüme sahipseniz `Annotated` ifadesini kullanırken hata alacaksınızdır.
`Annotated` ifadesini kullanmadan önce [FastAPI versiyon güncellemesini](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} en az 0.95.1 sürümüne getirdiğinizden emin olunuz.
Üstveri Tanımlayalım
Query
ifadesinde geçerli olan tüm parametreleri kullanabilirsiniz.
Örneğin, item_id
yol parametresi için title
üstverisi tanımlamak adına şunu yazabilirsiniz:
=== "Python 3.10+"
```Python hl_lines="10"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py!}
```
=== "Python 3.9+"
```Python hl_lines="10"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_an_py39.py!}
```
=== "Python 3.8+"
```Python hl_lines="11"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_an.py!}
```
=== "Python 3.10+ Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="8"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001_py310.py!}
```
=== "Python 3.8+ Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="10"
{!> ../../../docs_src/path_params_numeric_validations/tutorial001.py!}
```
!!! note "Not" Yol parametreleri, yolun bir parçası olduklarından dolayı her zaman zorunlu haldedirlerdir.
Bu nedenle, `...` ifadesini kullanarak onları zorunlu olarak damgalayabilirsiniz.
Yine de, parametreyi `None` ile tanımlamanıza veya parametreye varsayılan bir değer atamanıza rağmen parametre bunlardan etkilenmeyip her koşulda zorunlu kılınacaktır.
İhtiyaca Göre Parametreleri Sıralayalım
!!! tip "İpucu"
Bu durum, Annotated
kullandığınız şartlarda çok da önemli veya gerekli olmayacaktır.
Diyelim ki q
sorgu parametresini zorunlu bir str
olarak tanımlamak istiyorsunuz.
Ve o parametre için farklı bir tanımlama da yapmanıza gerek olmadığından dolayı Query
ifadesine çok da gerek duymuyorsunuz.
Ama yine de, item_id
yol parametresi için Path
ifadesini kullanma ihtiyacı duyuyorsunuz ve bazı nedenlerden dolayı Annotated
ifadesini kullanmak istemiyorsunuz.
Bu durumda, "varsayılan" değeri olmayan bir parametrenin önüne "varsayılan" değere sahip bir parametre koyarsanız Python huysuzlanacaktır.
Buna rağmen, varsayılan değersiz parametreyi (q
sorgu parametresini) başa alacak şekilde yeniden sıralayabilirsiniz.
FastAPI için bu durumun bir önemi yoktur ve parametreleri isimlerine, tiplerine ve varsayılan tanımlamalarına (Query
, Path
, vb.) göre sıra fark etmeksizin ayırt edecektir.
Yani, fonksiyonunuzu bu şekilde tanımlayabilirsiniz:
=== "Python 3.8 Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="7"
{!> ../../../docs_src/path_params_numeric_validations/tutorial002.py!}
```
Unutmamanız gerekir ki, bu tür bir problemi Annotated
ifadesini kullanmayı tercih ederseniz Query()
veya Path()
ifadeleri için fonksiyon parametrelerinin varsayılan değerlerini kullanmadığınızdan dolayı yaşamayacaksınızdır.
=== "Python 3.9+"
```Python hl_lines="10"
{!> ../../../docs_src/path_params_numeric_validations/tutorial002_an_py39.py!}
```
=== "Python 3.8+"
```Python hl_lines="9"
{!> ../../../docs_src/path_params_numeric_validations/tutorial002_an.py!}
```
İhtiyaca Göre Parametre Sıralamada Püf Noktalar
!!! tip "İpucu"
Bu durum, Annotated
kullandığınız şartlarda çok da önemli veya gerekli olmayacaktır.
İşte, kullanışlı olabilecek fakat sıkça kullanmayacağınız küçük bir püf nokta.
Eğer:
q
sorgu parametresiniQuery
ifadesi veya herhangi bir varsayılan değer olmadan tanımlamak,item_id
yol parametresiniPath
ifadesi ile tanımlamak,- bu parametrelere farklı sıralamayla sahip olmak,
- ve
Annotated
ifadesini kullanmamak istiyorsanız
...Python'ın bu durum için özel bir sözdizimi vardır.
*
simgesini, fonksiyonun ilk parametresi olarak geçebilirsiniz.
Python, *
simgesi ile özel bir şey yapmayıp varsayılan değerleri olmasa bile ardından gelen parametrelerin, anahtar kelime argümanları (anahtar-değer eşleri) diğer bir deyişle kwargs
olarak çağırılması gerektiğinin farkında olacaktır.
{!../../../docs_src/path_params_numeric_validations/tutorial003.py!}
Annotated
ile Daha İyi
Eğer Annotated
ifadesini kullanıyorsanız fonksiyon parametrelerinin varsayılan değerlerini kullanmayacağınızdan dolayı bu tarz bir probleme ve *
simgesini kullanmaya ihtiyacınız kalmayacağını aklınızda bulundurabilirsiniz.
=== "Python 3.9+"
```Python hl_lines="10"
{!> ../../../docs_src/path_params_numeric_validations/tutorial003_an_py39.py!}
```
=== "Python 3.8+"
```Python hl_lines="9"
{!> ../../../docs_src/path_params_numeric_validations/tutorial003_an.py!}
```
Sayı Doğrulamaları: -dan Büyük veya Eşit
Query
ve Path
ifadeleri (ve ileride göreceğiniz diğerleri) ile sayı kısıtlamaları tanımlayabilirsiniz.
Burada, ge=1
ifadesi sayesinde item_id
değeri, 1
'den "büyük veya eşit" olmak zorunda kalacaktır.
=== "Python 3.9+"
```Python hl_lines="10"
{!> ../../../docs_src/path_params_numeric_validations/tutorial004_an_py39.py!}
```
=== "Python 3.8+"
```Python hl_lines="9"
{!> ../../../docs_src/path_params_numeric_validations/tutorial004_an.py!}
```
=== "Python 3.8+ Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="8"
{!> ../../../docs_src/path_params_numeric_validations/tutorial004.py!}
```
Sayı Doğrulamaları: -dan Büyük ve -dan Küçük veya Eşit
Aynı kural şu ifadeler için de geçerlidir:
gt
: -dan büyükle
: -dan küçük veya eşit
=== "Python 3.9+"
```Python hl_lines="10"
{!> ../../../docs_src/path_params_numeric_validations/tutorial005_an_py39.py!}
```
=== "Python 3.8+"
```Python hl_lines="9"
{!> ../../../docs_src/path_params_numeric_validations/tutorial005_an.py!}
```
=== "Python 3.8+ Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="9"
{!> ../../../docs_src/path_params_numeric_validations/tutorial005.py!}
```
Sayı Doğrulamaları: Float Sayılar, -dan Büyük ve -dan Küçük
Sayı doğrulamaları float
değerler ile de kullanılabilir.
Sadece ge
değil gt
tanımlamasının da yapılabilmesinin önemli olduğu asıl kısım burasıdır. Örneğin, bu tanımlama ile birlikte bir değerin 1
'den küçük olmasına rağmen 0
'dan büyük olmasını zorunlu kılabilirsiniz.
Bu sayede, 0.5
değeri geçerli olurken 0.0
veya 0
değerleri olmayacaktır.
Aynı durum lt (-dan küçük)
için de geçerlidir.
=== "Python 3.9+"
```Python hl_lines="13"
{!> ../../../docs_src/path_params_numeric_validations/tutorial006_an_py39.py!}
```
=== "Python 3.8+"
```Python hl_lines="12"
{!> ../../../docs_src/path_params_numeric_validations/tutorial006_an.py!}
```
=== "Python 3.8+ Annotated'sız"
!!! tip "İpucu"
Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz.
```Python hl_lines="11"
{!> ../../../docs_src/path_params_numeric_validations/tutorial006.py!}
```
Özet
Query
, Path
ifadeleri (ve henüz görmediğiniz diğer ifadeler) ile birlikte Sorgu Parametreleri ve String Doğrulamaları{.internal-link target=_blank}'nda da olduğu gibi üstveri ve string doğrulamaları tanımlayabilirsiniz.
Ayrıca, sayısal doğrulamalar için de tanımlama yapabilirsiniz:
gt
:-dan büyük
ge
:-dan büyük veya eşit
lt
:-dan küçük
le
:-dan küçük veya eşit
!!! info "Bilgi"
Query
, Path
ifadeleri ve ileride göreceğiniz diğer sınıflar Param
ortak sınıfının alt sınıflarıdır.
Bunların hepsi, aşina olmuş olduğunuz ek doğrulama ve üstveri tanımlamaları için aynı parametrelerden faydalanır.
!!! note "Teknik Detaylar"
Query
, Path
ifadeleri ve fastapi
paketinden içeri aktarılan diğer ifadeler aslında birer fonksiyondur.
Bu fonksiyonlar çağrıldıkları zaman aynı isime sahip sınıfların örneklerini döndürürler.
Yani, fonksiyon olan `Query` ifadesini içeri aktarıp çağırdığınızda yine `Query` isminde bir sınıfın örneğini geri döndürür.
Bu fonksiyonlar (direkt olarak sınıf kullanımı yerine), editörünüzün onların tipleri hakkında hata tespit etmemesi adına mevcutta bulunurlar.
Bu sayede, bahsedilen hataları görmezden gelmek adına özel düzenlemeler yapmadan editörünüzü ve kod araçlarınızı kullanabilirsiniz.