From f34fdbd31bf02e13e7114a8e42efd34eb1deadcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emirhan=20Soyta=C5=9F?= Date: Mon, 26 Feb 2024 20:31:06 +0300 Subject: [PATCH 1/2] Add Turkish translation for `docs/tr/docs/tutorial/body-multiple-params.md` --- docs/tr/docs/tutorial/body-multiple-params.md | 309 ++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 docs/tr/docs/tutorial/body-multiple-params.md diff --git a/docs/tr/docs/tutorial/body-multiple-params.md b/docs/tr/docs/tutorial/body-multiple-params.md new file mode 100644 index 000000000..5b27151f2 --- /dev/null +++ b/docs/tr/docs/tutorial/body-multiple-params.md @@ -0,0 +1,309 @@ +# Gövde - Çoklu Parametreler + +`Path` ve `Query` ifadelerinin kullanımına aşina olduğumuza göre hadi gelin istek gövdesi tanımlamalarının daha ileri kullanımlarını irdeleyelim. + +## `Path`, `Query` ve Gövde Parametrelerinin Bir Arada Kullanımı + +Her şeyden önce, `Path`, `Query` ve istek gövdesi parametre tanımlamaları özgürce bir arada kullanılabilir ve **FastAPI** bunlar ile ne yapması gerektiğinin bilincindedir. + +Ayrıca, `None` varsayılan ifadesi kullanılarak gövde parametreleri isteğe bağlı duruma getirilebilir: + +=== "Python 3.10+" + + ```Python hl_lines="18-20" + {!> ../../../docs_src/body_multiple_params/tutorial001_an_py310.py!} + ``` + +=== "Python 3.9+" + + ```Python hl_lines="18-20" + {!> ../../../docs_src/body_multiple_params/tutorial001_an_py39.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="19-21" + {!> ../../../docs_src/body_multiple_params/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="17-19" + {!> ../../../docs_src/body_multiple_params/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="19-21" + {!> ../../../docs_src/body_multiple_params/tutorial001.py!} + ``` + +!!! note "Not" + Dikkatinizi çekerim ki, bu durumda, `None` varsayılan değeri tanımlı olduğundan dolayı gövdeden alınacak olan `item` parametresi isteğe bağlıdır. + +## Çoklu Gövde Parametreleri + +Bir önceki örnekte, *yol operasyonları*, `Item` ifadesinin özniteliklerini kapsayan alttaki gibi bir JSON gövdesi bekliyor olurdu: + +```JSON +{ + "name": "Foo", + "description": "The pretender", + "price": 42.0, + "tax": 3.2 +} +``` + +Fakat, birden fazla gövde parametresi tanımı da yapılabilir, örneğin `item` ve `user`: + +=== "Python 3.10+" + + ```Python hl_lines="20" + {!> ../../../docs_src/body_multiple_params/tutorial002_py310.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="22" + {!> ../../../docs_src/body_multiple_params/tutorial002.py!} + ``` + +Bu durumda, **FastAPI**, fonksiyonda birden fazla (Pydantic modelleri olan iki) gövde parametresi olduğunun farkına varacaktır. + +Böylece, daha sonra FastAPI, parametre adlarını gövdede anahtar (alan adları) olarak kullanacak ve şuna benzer bir gövde bekliyor olacaktır: + +```JSON +{ + "item": { + "name": "Foo", + "description": "The pretender", + "price": 42.0, + "tax": 3.2 + }, + "user": { + "username": "dave", + "full_name": "Dave Grohl" + } +} +``` + +!!! note "Not" + Fark ettiyseniz, `item` ifadesi eskisi gibi tanımlanmasına rağmen şimdi gövdenin içerisinde `item` isminde bir anahtar olarak bekleniyor olacaktır. + + +**FastAPI**, `item` ve `user` ifadelerinin kendilerine özgü içerikleri edinmeleri için istek içerisinden otomatik dönüştürme yapacaktır. + +Ayrıca, bileşik verinin doğrulamasını gerçekleştirecek, otomatik dokümantasyon ve OpenAPI şemaları için dokümante edecektir. + +## Gövde İçinde Tekil Değerler + +Sorgu ve yol parametreleri için ek veri tanımlamak adına `Query` ve `Path` ifadeleri mevcutta bulunduğu gibi **FastAPI**, `Body` ifadesini de temin eder. + +Örneğin, önceki modeli genişleterek aynı gövde içerisinde `item` ve `user` ifadelerinin dışında `importance` adında başka bir ifadenin de yer alıp almamasını belirleyebilirsiniz. + +Eğer bu ifadeyi olduğu gibi yazarsanız ifade tekil değer olduğundan dolayı **FastAPI** ifadeyi bir sorgu parametresi olarak varsayacaktır. + +`Body` ifadesini kullanarak **FastAPI**'a, ifadeye bir gövde anahtarı olarak davranması gerektiğinin talimatını verebilirsiniz: + +=== "Python 3.10+" + + ```Python hl_lines="23" + {!> ../../../docs_src/body_multiple_params/tutorial003_an_py310.py!} + ``` + +=== "Python 3.9+" + + ```Python hl_lines="23" + {!> ../../../docs_src/body_multiple_params/tutorial003_an_py39.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="24" + {!> ../../../docs_src/body_multiple_params/tutorial003_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="20" + {!> ../../../docs_src/body_multiple_params/tutorial003_py310.py!} + ``` + +=== "Python 3.8+ non-Annotated" + + !!! tip "İpucu" + Mümkün oldukça `Annotated`'lı versiyonu kullanmaya özen gösteriniz. + + ```Python hl_lines="22" + {!> ../../../docs_src/body_multiple_params/tutorial003.py!} + ``` + +Bu durumda, **FastAPI** şuna benzer bir gövde bekliyor olacaktır: + +```JSON +{ + "item": { + "name": "Foo", + "description": "The pretender", + "price": 42.0, + "tax": 3.2 + }, + "user": { + "username": "dave", + "full_name": "Dave Grohl" + }, + "importance": 5 +} +``` + +Aynı şekilde, FastAPI veri tiplerini dönüştürür, doğrular, dokümante eder vb. + +## Çoklu Gövde ve Sorgu Parametreleri + +Ve elbette, ihtiyacınız oldukça herhangi bir gövde parametresine ek olarak sorgu parametreleri de tanımlayabilirsiniz. + +Tekil değerler varsayılan olarak sorgu parametreleri biçiminde değerlendirildiklerinden dolayı açıkça `Query` ifadesini eklemenize gerek yoktur, onun yerine şunu kullanabilirsiniz: + +```Python +q: Union[str, None] = None +``` + +Ya da, Python 3.10 veya daha üst versiyonlarda şunu: + +```Python +q: str | None = None +``` + +Örneğin: + +=== "Python 3.10+" + + ```Python hl_lines="27" + {!> ../../../docs_src/body_multiple_params/tutorial004_an_py310.py!} + ``` + +=== "Python 3.9+" + + ```Python hl_lines="27" + {!> ../../../docs_src/body_multiple_params/tutorial004_an_py39.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="28" + {!> ../../../docs_src/body_multiple_params/tutorial004_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="25" + {!> ../../../docs_src/body_multiple_params/tutorial004_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="27" + {!> ../../../docs_src/body_multiple_params/tutorial004.py!} + ``` + +!!! info "Bilgi" + `Body` ifadesi, `Query`, `Path` ve ileride göreceğiniz diğer ifadelerde geçerli olan bütün ek doğrulama ve üstveri parametrelerine de sahiptir. + +## Tek Gövde Parametresi Yerleştirmek + +Diyelim ki, `Item` isimli Pydantic modeli içerisinde `item` adında tek bir gövde parametresine sahipsiniz. + +Varsayılan olarak **FastAPI**, direkt olarak gövdesini bekliyor olacaktır. + +Ancak eğer, FastAPI'ın, `item` isminde bir anahtara sahip ve içerisinde ek gövde parametreleri tanımı yapıldığında olduğu gibi modelin içeriklerinin bulunduğu bir JSON bekliyor olmasını istiyorsanız özel `Body` parametresi olan `embed` ifadesini kullanabilirsiniz: + +```Python +item: Item = Body(embed=True) +``` + +şuradaki gibi: + +=== "Python 3.10+" + + ```Python hl_lines="17" + {!> ../../../docs_src/body_multiple_params/tutorial005_an_py310.py!} + ``` + +=== "Python 3.9+" + + ```Python hl_lines="17" + {!> ../../../docs_src/body_multiple_params/tutorial005_an_py39.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="18" + {!> ../../../docs_src/body_multiple_params/tutorial005_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="15" + {!> ../../../docs_src/body_multiple_params/tutorial005_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="17" + {!> ../../../docs_src/body_multiple_params/tutorial005.py!} + ``` + +Bu durumda, **FastAPI**, şunun gibi bir gövde bekliyor olacaktır: + +```JSON hl_lines="2" +{ + "item": { + "name": "Foo", + "description": "The pretender", + "price": 42.0, + "tax": 3.2 + } +} +``` + +bunun aksine: + +```JSON +{ + "name": "Foo", + "description": "The pretender", + "price": 42.0, + "tax": 3.2 +} +``` + +## Özet + +Bir isteğin sadece tek bir gövdeye sahip olabilmesine rağmen *yol operasyon fonksiyonunuza* birden fazla gövde parametresi ekleyebilirsiniz. + +**FastAPI**, fonksiyonda doğru veriyi sağlayacak, *yol operasyonundaki* doğru şemayı doğruladıktan sonra dokümante edip her şeyin üstesinden gelecektir. + +Gövdenin bir parçası olarak değerlendirilmeleri adına tekil değerler de tanımlayabilirsiniz. + +Ve ayrıca, tek bir parametre tanımlandığı durumlarda bile **FastAPI**'a gövdeyi bir anahtarın içine yerleştirmesi gerektiğinin talimatını verebilirsiniz. \ No newline at end of file From a8fbb963a42ec7757d34de87d82ddb950188e92b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 17:34:20 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/tr/docs/tutorial/body-multiple-params.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tr/docs/tutorial/body-multiple-params.md b/docs/tr/docs/tutorial/body-multiple-params.md index 5b27151f2..62e6d002f 100644 --- a/docs/tr/docs/tutorial/body-multiple-params.md +++ b/docs/tr/docs/tutorial/body-multiple-params.md @@ -306,4 +306,4 @@ Bir isteğin sadece tek bir gövdeye sahip olabilmesine rağmen *yol operasyon f Gövdenin bir parçası olarak değerlendirilmeleri adına tekil değerler de tanımlayabilirsiniz. -Ve ayrıca, tek bir parametre tanımlandığı durumlarda bile **FastAPI**'a gövdeyi bir anahtarın içine yerleştirmesi gerektiğinin talimatını verebilirsiniz. \ No newline at end of file +Ve ayrıca, tek bir parametre tanımlandığı durumlarda bile **FastAPI**'a gövdeyi bir anahtarın içine yerleştirmesi gerektiğinin talimatını verebilirsiniz.