diff --git a/docs/hu/docs/features.md b/docs/hu/docs/features.md deleted file mode 100644 index eaf54ea4bb..0000000000 --- a/docs/hu/docs/features.md +++ /dev/null @@ -1,198 +0,0 @@ -# Funkciók - -## FastAPI funkciók - -A **FastAPI** a következőket nyújtja: - -### Nyílt szabványokon alapul - -* OpenAPI API létrehozásához, beleértve útvonal műveletek, paraméterek, törzs kérések, biztonság stb. -* Automatikus adatmodell-dokumentáció a JSON-sémával (mivel maga az OpenAPI is a JSON-sémán alapul). -* Ezen szabványok köré tervezve, alapos tanulmányozás után. Nem csak egy utólagos rétegként a tetején. -* Ez számos nyelven lehetővé teszi az automatikus **klienskód-generálás** használatát is. - -### Automatikus dokumentációk - -Interaktív API dokumentációs és felfedező webes felhasználói felületek. Mivel a keretrendszer OpenAPI-n alapul, több lehetőség is létezik, amelyek közül 2 alapértelmezés szerint benne van. - -* Swagger UI, interaktív felfedezés, hívja és tesztelje API-ját közvetlenül a böngészőből. - -![Swagger UI interakció](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) - -* Alternatív API dokumentáció a ReDoc segítségével. - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) - -### Csak Modern Python - -Mindez szabványos **Python 3.6 típusú** deklarációkon alapul (hála a Pydantic-nek). Nincs új megtanulandó szintaxis. Csak szabványos modern Python. - -Ha 2 perces felfrissítésre van szüksége a Python-típusok használatáról (még ha nem is használja a FastAPI-t), tekintse meg a rövid oktatóanyagot: [Python Típusok](python-types.md){.internal-link target=_blank}. - -A szabványos Python típusokat írod: - -``` Python -from datetime import date - -from pydantic import BaseModel - -# Declare a variable as a str -# and get editor support inside the function -def main(user_id: str): - return user_id - - -# A Pydantic model -class User(BaseModel): - id: int - name: str - joined: date -``` - -Ezt így lehet használni: - -``` Python -my_user: User = User(id=3, name="John Doe", joined="2018-07-19") - -second_user_data = { - "id": 4, - "name": "Mary", - "joined": "2018-11-30", -} - -my_second_user: User = User(**second_user_data) -``` - -!!! info - A "**my_second_user" jelentése: - - Közvetlenül adja át a `second_user_data` szótár kulcsait és értékeit kulcs-érték argumentumként, ami egyenértékű a következővel: `User(id=4, name="Mary", joined="2018-11-30")` - -### Szerkesztő támogatás - -Az összes keretrendszert úgy tervezték meg, hogy könnyen és intuitívan lehessen használni, minden döntést több szerkesztőn is teszteltek még a fejlesztés megkezdése előtt, hogy a legjobb fejlesztési élményt biztosítsák. - -A legutóbbi Python fejlesztői felmérésben egyértelmű volt, hogy a leggyakrabban használt funkció az "automatikus kiegészítés". - -A teljes **FastAPI** keretrendszer ennek kielégítésére épül. Az automatikus kiegészítés mindenhol működik. - -Alig kell visszamennie a dokumentációhoz. - -A szerkesztője a következőképpen segíthet Önnek: - -* Visual Studio Code-ban: - -![szerkesztő támogatása](https://fastapi.tiangolo.com/img/vscode-completion.png) - -* PyCharmban: - -![szerkesztő támogatása](https://fastapi.tiangolo.com/img/pycharm-completion.png) - -Olyan kódkiegészítést kap, amelyet korábban lehetetlennek tartott. Például a „price” kulcs egy JSON-törzsben (amely lehet beágyazott), amely egy kérelemből származik. - -Nem kell többé rossz kulcsneveket begépelni, oda-vissza lépkedni a dokumentumok között, vagy fel-le görgetni, hogy megtudja, hogy végre használta-e a `username` vagy a `user_name` értéket. - -### Rövid - -Mindenhez ésszerű **alapbeállítások** vannak, mindenhol választható konfigurációkkal. Az összes paraméter finomhangolható, hogy azt tegye, amire szüksége van, és amire az API-nak szüksége van. - -De alapértelmezés szerint minden **"csak működik"**. - -### Érvényesítés - -* Érvényesítés a legtöbb (vagy az összes?) Python **adattípushoz**, beleértve: - * JSON objektumok (`dict`). - * JSON-tömb (`lista`), amely elemtípusokat határoz meg. - * String (`str`) mezők, amelyek meghatározzák a minimális és maximális hosszúságot. - * Számok (`int`, `float`) min és max értékekkel stb. - -* Érvényesítés az egzotikusabb típusokhoz, mint például: - * URL. - * E-mail. - * UUID. - * ...és mások. - -Az összes érvényesítést a jól bevált és robusztus **Pydantic** kezeli. - -### Biztonság és hitelesítés - -Biztonság és azonosítás integrálva. Kompromisszumok nélkül az adatbázisokkal vagy adatmodellekkel. - -Az OpenAPI-ban meghatározott összes biztonsági séma, beleértve: - -* HTTP Basic. -* **OAuth2** (**JWT tokenekkel** is). Tekintse meg az [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank} oktatóanyagát. -* API kulcsok: - * Fejlécek. - * Paraméterek lekérdezése. - * Cookie-k stb. - -Plusz a Starlette összes biztonsági funkciója (beleértve a **session cookie-kat**). - -Mindegyik újrafelhasználható eszközként és komponensként készült, amelyek könnyen integrálhatók a rendszerekkel, adattárolókkal, relációs és NoSQL adatbázisokkal stb. - -### Függőség Injekció - -A FastAPI egy rendkívül könnyen használható, de rendkívül hatékony függőség-injekció rendszert tartalmaz. - -* Még a függőségeknek is lehetnek függőségei, létrehozva a függőségek hierarchiáját vagy **"grafikonját"**. -* Mindent **automatikusan kezel** a keretrendszer. -* Minden függőség igényelhet adatokat a kérésekből, és **kibővítheti az útvonalművelet** megszorítását és az automatikus dokumentációt. -* **Automatikus érvényesítés** még a függőségekben meghatározott *elérési út* paramétereknél is. -* Komplex felhasználói hitelesítési rendszerek támogatása, **adatbázis-kapcsolatok** stb. -* **Nincs kompromisszum** adatbázisokkal, frontendekkel stb. De mindegyikkel könnyen integrálható. - -### Korlátlan "bővítmények" - -Vagy más módon, nincs szükség rájuk, importálja és használja a szükséges kódot. - -Minden integrációt úgy terveztek meg, hogy olyan egyszerűen használható legyen (függőségekkel), hogy létrehozhat egy „beépülő modult” az alkalmazásához 2 kódsorból, ugyanazzal a struktúrával és szintaxissal, mint az *elérési út műveleteinél*. - -### Tesztelve - -* 100% tesztlefedettség. -* 100%-ban jegyzett kódbázishoz. -* Gyártási alkalmazásokban használják. - -## Starlette funkciók - -A **FastAPI** teljes mértékben kompatibilis a Starlette-tel , mivelhogy azon alapul. Tehát minden további Starlette kód is működni fog. - -A `FastAPI` valójában a `Starlette` alosztálya. Tehát, ha már ismeri vagy használja a Starlette-et, a legtöbb funkció ugyanúgy fog működni. - -A **FastAPI** segítségével megkapja a **Starlette** összes funkcióját (mivel a FastAPI csak Starlette szteroidokon): - -* Komolyan lenyűgöző teljesítmény. Ez az egyik leggyorsabb Python-keretrendszer, amely egyenrangú a **NodeJS-sel** és **Go-val**. -* **WebSocket** támogatás. -* Folyamat közbeni háttérfeladatok. -* Indítási és leállítási események. -* HTTPX-re épülő tesztkliens. -* **CORS**, GZip, statikus fájlok, streaming válaszok. -* **Session és Cookie** támogatás. -* 100%-os tesztlefedettség. -* 100%-os típusú megjegyzésekkel ellátott kódbázis. - -## Pydantic funkciók - -A **FastAPI** teljes mértékben kompatibilis Pydantic-kal, sőt, azon alapul. Tehát minden további Pydantic kód is működni fog. - -Beleértve a Pydantic alapú külső könyvtárakat is, mint ORM, ODM adatbázisokhoz. - -Ez azt is jelenti, hogy sok esetben ugyanazt az objektumot, amit egy kérésből kapunk, **közvetlenül az adatbázisnak** továbbíthatjuk, mivel minden automatikusan érvényesítésre kerül. - -Ugyanez fordítva is érvényes, sok esetben az adatbázisból kapott objektumot **közvetlenül a kliensnek** adhatod át. - -A **FastAPI** segítségével megkapja a **Pydantic** összes funkcióját (mivel a FastAPI a Pydanticon alapul az összes adatkezeléshez): - -* **Nincs agyafúrás**: - * Nincs új megtanulni való sémadefiníciós mikronyelv. - * Ha ismeri a Python típusokat, tudja, hogyan kell használni a Pydantic-ot. -* Szépen kapcsolódik az **IDE/linter/agy**-hez: - * Mivel a pydantikus adatstruktúrák csak az Ön által meghatározott osztályok példányai; Az automatikus kiegészítésnek, a lintingnek, a mypy-nek és az intuíciónak mind megfelelően működnie kell az ellenőrzött adatokkal. -* Érvényesítsen **összetett struktúrákat**: - * Hierarchikus Pydantic modellek, Python típusú listák és szótárak stb. használata. - * Az érvényesítők pedig lehetővé teszik az összetett adatsémák egyértelműen és egyszerűen definiálását, ellenőrzését és JSON-sémaként dokumentálását. - * Mélyen **beágyazott JSON** objektumokkal rendelkezhet, és mindegyiket ellenőrizheti és megjegyzésekkel látja el. -* **Bővíthető**: - * A Pydantic lehetővé teszi egyéni adattípusok meghatározását, vagy kiterjesztheti az érvényesítést módszerekkel a validátor dekorátorral díszített modelleken. -* 100%-os tesztlefedettség. diff --git a/docs/hu/docs/index.md b/docs/hu/docs/index.md deleted file mode 100644 index 0597af560f..0000000000 --- a/docs/hu/docs/index.md +++ /dev/null @@ -1,472 +0,0 @@ - -{!../../../docs/missing-translation.md!} - - -

- FastAPI -

-

- FastAPI framework, high performance, easy to learn, fast to code, ready for production -

-

- - Test - - - Coverage - - - Package version - - - Supported Python versions - -

- ---- - -**Documentation**: https://fastapi.tiangolo.com - -**Source Code**: https://github.com/tiangolo/fastapi - ---- - -FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.7+ based on standard Python type hints. - -The key features are: - -* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance). -* **Fast to code**: Increase the speed to develop features by about 200% to 300%. * -* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. * -* **Intuitive**: Great editor support. Completion everywhere. Less time debugging. -* **Easy**: Designed to be easy to use and learn. Less time reading docs. -* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs. -* **Robust**: Get production-ready code. With automatic interactive documentation. -* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema. - -* estimation based on tests on an internal development team, building production applications. - -## Sponsors - - - -{% if sponsors %} -{% for sponsor in sponsors.gold -%} - -{% endfor -%} -{%- for sponsor in sponsors.silver -%} - -{% endfor %} -{% endif %} - - - -Other sponsors - -## Opinions - -"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" - -
Kabir Khan - Microsoft (ref)
- ---- - -"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_" - -
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
- ---- - -"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_" - -
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
- ---- - -"_I’m over the moon excited about **FastAPI**. It’s so fun!_" - -
Brian Okken - Python Bytes podcast host (ref)
- ---- - -"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._" - -
Timothy Crosley - Hug creator (ref)
- ---- - -"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_" - -"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_" - -
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
- ---- - -"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._" - -
Deon Pillsbury - Cisco (ref)
- ---- - -## **Typer**, the FastAPI of CLIs - - - -If you are building a CLI app to be used in the terminal instead of a web API, check out **Typer**. - -**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀 - -## Requirements - -Python 3.7+ - -FastAPI stands on the shoulders of giants: - -* Starlette for the web parts. -* Pydantic for the data parts. - -## Installation - -
- -```console -$ pip install fastapi - ----> 100% -``` - -
- -You will also need an ASGI server, for production such as Uvicorn or Hypercorn. - -
- -```console -$ pip install "uvicorn[standard]" - ----> 100% -``` - -
- -## Example - -### Create it - -* Create a file `main.py` with: - -```Python -from typing import Union - -from fastapi import FastAPI - -app = FastAPI() - - -@app.get("/") -def read_root(): - return {"Hello": "World"} - - -@app.get("/items/{item_id}") -def read_item(item_id: int, q: Union[str, None] = None): - return {"item_id": item_id, "q": q} -``` - -
-Or use async def... - -If your code uses `async` / `await`, use `async def`: - -```Python hl_lines="9 14" -from typing import Union - -from fastapi import FastAPI - -app = FastAPI() - - -@app.get("/") -async def read_root(): - return {"Hello": "World"} - - -@app.get("/items/{item_id}") -async def read_item(item_id: int, q: Union[str, None] = None): - return {"item_id": item_id, "q": q} -``` - -**Note**: - -If you don't know, check the _"In a hurry?"_ section about `async` and `await` in the docs. - -
- -### Run it - -Run the server with: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -INFO: Started reloader process [28720] -INFO: Started server process [28722] -INFO: Waiting for application startup. -INFO: Application startup complete. -``` - -
- -
-About the command uvicorn main:app --reload... - -The command `uvicorn main:app` refers to: - -* `main`: the file `main.py` (the Python "module"). -* `app`: the object created inside of `main.py` with the line `app = FastAPI()`. -* `--reload`: make the server restart after code changes. Only do this for development. - -
- -### Check it - -Open your browser at http://127.0.0.1:8000/items/5?q=somequery. - -You will see the JSON response as: - -```JSON -{"item_id": 5, "q": "somequery"} -``` - -You already created an API that: - -* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`. -* Both _paths_ take `GET` operations (also known as HTTP _methods_). -* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`. -* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`. - -### Interactive API docs - -Now go to http://127.0.0.1:8000/docs. - -You will see the automatic interactive API documentation (provided by Swagger UI): - -![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) - -### Alternative API docs - -And now, go to http://127.0.0.1:8000/redoc. - -You will see the alternative automatic documentation (provided by ReDoc): - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) - -## Example upgrade - -Now modify the file `main.py` to receive a body from a `PUT` request. - -Declare the body using standard Python types, thanks to Pydantic. - -```Python hl_lines="4 9-12 25-27" -from typing import Union - -from fastapi import FastAPI -from pydantic import BaseModel - -app = FastAPI() - - -class Item(BaseModel): - name: str - price: float - is_offer: Union[bool, None] = None - - -@app.get("/") -def read_root(): - return {"Hello": "World"} - - -@app.get("/items/{item_id}") -def read_item(item_id: int, q: Union[str, None] = None): - return {"item_id": item_id, "q": q} - - -@app.put("/items/{item_id}") -def update_item(item_id: int, item: Item): - return {"item_name": item.name, "item_id": item_id} -``` - -The server should reload automatically (because you added `--reload` to the `uvicorn` command above). - -### Interactive API docs upgrade - -Now go to http://127.0.0.1:8000/docs. - -* The interactive API documentation will be automatically updated, including the new body: - -![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) - -* Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API: - -![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) - -* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen: - -![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) - -### Alternative API docs upgrade - -And now, go to http://127.0.0.1:8000/redoc. - -* The alternative documentation will also reflect the new query parameter and body: - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) - -### Recap - -In summary, you declare **once** the types of parameters, body, etc. as function parameters. - -You do that with standard modern Python types. - -You don't have to learn a new syntax, the methods or classes of a specific library, etc. - -Just standard **Python 3.7+**. - -For example, for an `int`: - -```Python -item_id: int -``` - -or for a more complex `Item` model: - -```Python -item: Item -``` - -...and with that single declaration you get: - -* Editor support, including: - * Completion. - * Type checks. -* Validation of data: - * Automatic and clear errors when the data is invalid. - * Validation even for deeply nested JSON objects. -* Conversion of input data: coming from the network to Python data and types. Reading from: - * JSON. - * Path parameters. - * Query parameters. - * Cookies. - * Headers. - * Forms. - * Files. -* Conversion of output data: converting from Python data and types to network data (as JSON): - * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc). - * `datetime` objects. - * `UUID` objects. - * Database models. - * ...and many more. -* Automatic interactive API documentation, including 2 alternative user interfaces: - * Swagger UI. - * ReDoc. - ---- - -Coming back to the previous code example, **FastAPI** will: - -* Validate that there is an `item_id` in the path for `GET` and `PUT` requests. -* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests. - * If it is not, the client will see a useful, clear error. -* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests. - * As the `q` parameter is declared with `= None`, it is optional. - * Without the `None` it would be required (as is the body in the case with `PUT`). -* For `PUT` requests to `/items/{item_id}`, Read the body as JSON: - * Check that it has a required attribute `name` that should be a `str`. - * Check that it has a required attribute `price` that has to be a `float`. - * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present. - * All this would also work for deeply nested JSON objects. -* Convert from and to JSON automatically. -* Document everything with OpenAPI, that can be used by: - * Interactive documentation systems. - * Automatic client code generation systems, for many languages. -* Provide 2 interactive documentation web interfaces directly. - ---- - -We just scratched the surface, but you already get the idea of how it all works. - -Try changing the line with: - -```Python - return {"item_name": item.name, "item_id": item_id} -``` - -...from: - -```Python - ... "item_name": item.name ... -``` - -...to: - -```Python - ... "item_price": item.price ... -``` - -...and see how your editor will auto-complete the attributes and know their types: - -![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) - -For a more complete example including more features, see the Tutorial - User Guide. - -**Spoiler alert**: the tutorial - user guide includes: - -* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**. -* How to set **validation constraints** as `maximum_length` or `regex`. -* A very powerful and easy to use **Dependency Injection** system. -* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth. -* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic). -* **GraphQL** integration with Strawberry and other libraries. -* Many extra features (thanks to Starlette) as: - * **WebSockets** - * extremely easy tests based on HTTPX and `pytest` - * **CORS** - * **Cookie Sessions** - * ...and more. - -## Performance - -Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as one of the fastest Python frameworks available, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*) - -To understand more about it, see the section Benchmarks. - -## Optional Dependencies - -Used by Pydantic: - -* email_validator - for email validation. - -Used by Starlette: - -* httpx - Required if you want to use the `TestClient`. -* jinja2 - Required if you want to use the default template configuration. -* python-multipart - Required if you want to support form "parsing", with `request.form()`. -* itsdangerous - Required for `SessionMiddleware` support. -* pyyaml - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI). -* ujson - Required if you want to use `UJSONResponse`. - -Used by FastAPI / Starlette: - -* uvicorn - for the server that loads and serves your application. -* orjson - Required if you want to use `ORJSONResponse`. - -You can install all of these with `pip install "fastapi[all]"`. - -## License - -This project is licensed under the terms of the MIT license. diff --git a/docs/hu/docs/python-types.md b/docs/hu/docs/python-types.md deleted file mode 100644 index 0103f8e1fa..0000000000 --- a/docs/hu/docs/python-types.md +++ /dev/null @@ -1,537 +0,0 @@ -# Python Típusok Bevezető - -A Python támogatja az opcionális "típustippeket" (más néven "típusjegyzeteket"). - -Ezek a **"típustippek"** vagy annotációk egy speciális szintaxis, amely lehetővé teszi egy változó típusának deklarálását. - -A változók típusainak deklarálásával a szerkesztők és eszközök jobb támogatást nyújthatnak. - -Ez csak egy **gyors útmutató/frissítő** a Python típustippekről. Csak a **FastAPI** használatához szükséges minimumot fedi le... ami valójában nagyon kevés. - -A **FastAPI** mind ezeken a típustippeken alapul, amelyek számos előnnyel járnak. - -De még ha soha nem is használja a **FastAPI-t**, akkor is előnyös lenne, ha tanulna róluk egy kicsit. - -!!! jegyzet - Ha Ön már mindent tud a típustippekről, ugorjon a következő fejezetre. - -## Motiváció - -Kezdjük egy egyszerű példával: - -``` Python -{!../../../docs_src/python_types/tutorial001.py!} -``` - -A program meghívásának kimenete: - -``` -John Doe -``` - -A függvény a következőket teszi: - -* Veszi a `first_name`-et és a `last_name`-et. -* Mindegyik első betűjét nagybetűvé alakítja a `title()`-lel. -* Összefűzi őket egy szóközzel a közepén. - -``` Python hl_lines="2" -{!../../../docs_src/python_types/tutorial001.py!} -``` - -### Szerkesse - -Ez egy nagyon egyszerű program. - -De most képzelje el, hogy a semmiből írja. - -Egy ponton elkezdte volna a függvény definícióját, készen voltak a paraméterek... - -De akkor meg kell hívnia "azt a módszert, amely az első betűt nagybetűvé alakítja". - -`upper` volt? Vagy `uppercase`? `first_uppercase`? `capitalize`? - -Ezután próbálkozik egy idős programozó barátjával, a szerkesztő automatikus kiegészítésével. - -Be kell írnia a függvény első paraméterét, a `first_name`-et, majd egy pontot (`.`), majd megnyomja a `Ctrl+Szóköz` billentyűt a befejezés elindításához. - -De sajnos semmi hasznosat nem kap: - - - -### Típusok hozzáadása - -Módosítsunk egyetlen sort az előző verzióhoz képest. - -Pontosan ezt a töredéket, a függvény paramétereit változtatjuk meg ebből: - -``` Python - first_name, last_name -``` - -arra, hogy: - -``` Python - first_name: str, first_name: str -``` - -Ez az. - -Ezek a "típustippek": - -``` Python hl_lines="1" -{!../../../docs_src/python_types/tutorial002.py!} -``` - -Ez nem ugyanaz, mint az alapértelmezett értékek deklarálása, mint például: - -``` Python - first_name="john", last_name="doe" -``` - -Ez két különböző dolog. - -Kettőspontokat (`:`) használunk, nem egyenlőségjelet (`=`). - -A típustippek hozzáadása általában nem változtatja meg azt, ami történik, mint ami nélkülük történne. - -De most képzelje el, hogy ismét a függvény létrehozásának kellős közepén van, de típusjelekkel. - -Ugyanazon a ponton megpróbálja elindítani az automatikus kiegészítést a `Ctrl+Szóköz` billentyűkombinációval, és ezt látja: - - - -Ezzel a lehetőségeket látva görgethet, amíg meg nem találja azt, amelyik már ismerős: - - - -## Több motiváció - -Nézze meg ezt a függvény, ennek már vannak típus tippjei: - -``` Python hl_lines="1" -{!../../../docs_src/python_types/tutorial003.py!} -``` - -Mivel a szerkesztő ismeri a változók típusát, nem csak kódkiegészítést kap, hanem hibaellenőrzést is: - - - -Most már tudja, hogy ki kell javítana, alakítsa át az `age` változót `str(age)` karakterláncra: - -``` Python hl_lines="2" -{!../../../docs_src/python_types/tutorial004.py!} -``` - -## Típusok deklarálása - -Épp most látta a fő helyet a típustippek deklarálásához. Függvényparaméterként. - -Ez egyben a fő hely, ahol ezeket a **FastAPI**-val használja. - -### Egyszerű típusok - -Az összes szabványos Python típust deklarálhatja, nem csak az str. - -Használhat például: - -* `int` -* `float` -* `bool` -* `byte` - -``` Python hl_lines="1" -{!../../../docs_src/python_types/tutorial005.py!} -``` - -### Általános típusok típusparaméterekkel - -Vannak olyan adatstruktúrák, amelyek más értékeket is tartalmazhatnak, mint például a `dict`, `list`, `set` és `tuple`. És a belső értékeknek is lehet saját típusuk. - -Ezeket a belső típusokkal rendelkező típusokat "**általános**" típusoknak nevezzük. És lehet deklarálni őket, akár belső típusaikkal együtt is. - -A típusok és a belső típusok deklarálásához használhatja a szabványos Python `typing` modult. Kifejezetten az ilyen típustippek támogatására létezik. - -#### A Python újabb verziói - -A `typing`-et használó szintaxis **kompatibilis** az összes verzióval, a Python 3.6-tól a legújabb verziókig, beleértve a Python 3.9-et, Python 3.10-et stb. - -Ahogy a Python fejlődik, az **újabb verziók** továbbfejlesztett támogatást nyújtanak ezekhez a típusjegyzetekhez, és sok esetben nem is kell importálnia és használnia a `typing` modult a típusjegyzetek deklarálásához. - -Ha használhat a Python egy újabb verzióját a projekthez, akkor ezt az extra egyszerűséget kihasználhatja. - -Az összes dokumentumban találhatók a Python egyes verzióival kompatibilis példák (ha van különbség). - -Például a „**Python 3.6+**” azt jelenti, hogy kompatibilis a Python 3.6 vagy újabb verzióival (beleértve a 3.7, 3.8, 3.9, 3.10, stb.) A „**Python 3.9+**” pedig azt jelenti, hogy kompatibilis a Python 3.9 vagy újabb verziójával (beleértve a 3.10-et stb.). - -Ha használhatja a **a Python legújabb verzióit**, használja a példákat a legújabb verzióhoz, ezeknek lesz a **legjobb és legegyszerűbb szintaxisa**, például „**Python 3.10+**”. - -#### Lista - -Például definiáljunk egy változót úgy, hogy az az `str` "listája" legyen. - -=== "Python 3.9+" - - Deklarálja a változót ugyanazzal a kettőspont (`:`) szintaxissal. - - Típusként írja be a `list` szót. - - Mivel a lista néhány belső típust tartalmaz, ezeket szögletes zárójelbe kell tenni: - - ``` Python hl_lines="1" - {!> ../../../docs_src/python_types/tutorial006_py39.py!} - ``` - -=== "Python 3.6+" - - From `typing` import `List` (nagy `L` betűvel): - - ``` Python hl_lines="1" - {!> ../../../docs_src/python_types/tutorial006.py!} - ``` - - Deklarálja a változót ugyanazzal a kettőspont (`:`) szintaxissal. - - Típusként adja meg azt a `List`-át, amelyet a `typing`-ból importált. - - Mivel a lista néhány belső típust tartalmaz, ezeket szögletes zárójelbe kell tenni: - - ``` Python hl_lines="4" - {!> ../../../docs_src/python_types/tutorial006.py!} - ``` - -!!! info - A szögletes zárójelben lévő belső típusokat "típusparamétereknek" nevezzük. - - Ebben az esetben az `str` a `List`-nek (vagy a Python 3.9-es és újabb verzióiban a `list`-nek) átadott típusparaméter. - -Ez azt jelenti, hogy az `items` változó egy `list`, és ebben a listában minden elem egy `str`. - -!!! tipp - Ha Python 3.9-et vagy újabb verziót használ, akkor nem kell importálnia a `List`-et a `typing`-ból, helyette használhatja ugyanazt a szokásos `list` típust. - -Ezzel a szerkesztője még a lista elemeinek feldolgozása közben is támogatást nyújthat: - - - -Típusok nélkül ezt szinte lehetetlen elérni. - -Figyelje meg, hogy az `item` változó az `items` lista egyik eleme. - -És mégis, a szerkesztő tudja, hogy ez egy `str`, és ehhez támogatást nyújt. - -#### Tuple és halmaz - -Ugyanezt tennéd, ha `tuple`-t és halmazt (`set`-et) deklarálnál: - -=== "Python 3.9+" - - ``` Python hl_lines="1" - {!> ../../../docs_src/python_types/tutorial007_py39.py!} - ``` - -=== "Python 3.6+" - - ``` Python hl_lines="1 4" - {!> ../../../docs_src/python_types/tutorial007.py!} - ``` - -Ez azt jelenti, hogy: - -* Az `items_t` változó egy `tuple`, amely 3 elemből áll, egy `int`, egy másik `int` és egy `str`. -* Az `items_s` változó egy `set`, és minden eleme `bytes` típusú. - -#### Szótár - -A `dict` (szótár) meghatározásához 2 típusú paramétert kell átadni, vesszővel elválasztva. - -Az első típusú paraméter a `dict` kulcsaira vonatkozik. - -A második típusú paraméter a `dict` értékeire vonatkozik: - -=== "Python 3.9+" - - ``` Python hl_lines="1" - {!> ../../../docs_src/python_types/tutorial008_py39.py!} - ``` - -=== "Python 3.6+" - - ``` Python hl_lines="1 4" - {!> ../../../docs_src/python_types/tutorial008.py!} - ``` - -Ez azt jelenti, hogy: - -* A `prices` változó egy `dict`: - * A `dict` kulcsai `str` típusúak (mondjuk az egyes elemek neve). - * A `dict` értékei `float` típusúak (tegyük fel, hogy az egyes cikkek ára). - -#### Unió - -Deklarálhatja, hogy egy változó **többféle** lehet, például egy `int` vagy egy `str`. - -A Python 3.6 és újabb verzióiban (beleértve a Python 3.10-et is) használhatja az `Union` típust a `typing` modulból, és szögletes zárójelbe teheti az elfogadandó típusokat. - -A Python 3.10-ben van egy **új szintaxis** is, ahol a lehetséges típusokat elválaszthatja egy függőleges sáv (`|` ). - -=== "Python 3.10+" - - ``` Python hl_lines="1" - {!> ../../../docs_src/python_types/tutorial008b_py310.py!} - ``` - -=== "Python 3.6+" - - ``` Python hl_lines="1 4" - {!> ../../../docs_src/python_types/tutorial008b.py!} - ``` - -Ez mindkét esetben azt jelenti, hogy az `item` lehet `int` vagy `str`. - -#### Esetleg `None`. - -Deklarálhatja, hogy egy értéknek lehet egy típusa, például az `str`, de lehet `None` is. - -A Python 3.6-os és újabb verzióiban (beleértve a Python 3.10-et is) deklarálhatja és használhatja az `Optional` importálásával a `typing` modulból. - -``` Python hl_lines="1 4" -{!../../../docs_src/python_types/tutorial009.py!} -``` - -Az `Optional[str]` használata az `str` helyett lehetővé teszi, hogy a szerkesztő segít felismerni azokat a hibákat, ahol feltételezhető, hogy egy érték mindig `str`, holott valójában az is lehet, hogy `None`. - -Az `Optional[Something]` valójában az `Union[Something, None]` lerövidítése, ezek egyenértékűek. - -Ez azt is jelenti, hogy a Python 3.10-ben használhatja a `Something | None` kifejezést: - -=== "Python 3.10+" - - ``` Python hl_lines="1" - {!> ../../../docs_src/python_types/tutorial009_py310.py!} - ``` - -=== "Python 3.6+" - - ``` Python hl_lines="1 4" - {!> ../../../docs_src/python_types/tutorial009.py!} - ``` - -=== "Python 3.6+ alternatíva" - - ``` Python hl_lines="1 4" - {!> ../../../docs_src/python_types/tutorial009b.py!} - ``` - -#### Az `Union` vagy az `Optional` használata - -Ha 3.10-nél régebbi Python-verziót használ, itt van a tipp az én nagyon **szubjektív** nézőpontomból: - -* 🚨 Kerülje az `Optional[SomeType]` használatát -* Ehelyett ✨ **használja az `Union[SomeType, None]`** ✨ lehetőséget. - -Mindkettő ekvivalens, és ugyanazt éri el, de én az `Union` szót javaslom az `Optional` helyett, mert a "**opcionális**" szó azt sugallja, hogy az érték nem kötelező, viszont valójában azt jelenti, hogy "lehet `None` is", akkor is ha a típus megadása kötelező. - -Úgy gondolom, hogy az `Union[SomeType, None]` egyértelműbb a jelentéséről. - -Ez csak a szavakról és a nevekről szól. De ezek a szavak befolyásolhatják, hogy Ön és csapattársai hogyan gondolkodnak a kódról. - -Példaként vegyük ezt a függvényt: - -``` Python hl_lines="1 4" -{!../../../docs_src/python_types/tutorial009c.py!} -``` - -A `name` paraméter `Optional[str]`-ként van definiálva, de **nem opcionális**, a függvény nem hívható meg a paraméter nélkül: - -``` Python -say_hi() # Ó, nem, ez hibát okoz! 😱 -``` - -A `name` paraméter **továbbra is kötelező** (nem *opcionális*), mert nincs alapértelmezett értéke. Ennek ellenére a `name` elfogadja a `None` értéket: - -``` Python -say_hi(name=None) # Ez működik, None egy érvényes típus🎉 -``` - -A jó hír az, hogy ha már a Python 3.10-et használja, nem kell aggódnia emiatt, mivel egyszerűen használhatja a `|`-t a típusok unióinak meghatározásához: - -``` Python hl_lines="1 4" -{!../../../docs_src/python_types/tutorial009c_py310.py!} -``` - -És akkor nem kell aggódnia az olyan nevek miatt, mint az `Optional` és az `Union`. 😎 - -#### Általános típusok - -Az ilyen típusú paramétereket szögletes zárójelben **Általános típusoknak** vagy **Általánosoknak** nevezzük, például: - -=== "Python 3.10+" - - Ugyanazokat a beépített típusokat használhatja általános típusként (szögletes zárójelekkel és típusokkal): - - * `list` - * `tuple`. - * `set` - * `dict` - - És ugyanaz, mint a Python 3.6-nál, a `typing` modulból: - - * `Union`. - * `Optional` (ugyanaz, mint a Python 3.6-nál) - * ...és mások. - - A Python 3.10-ben az `Union` és az `Optional` általános kifejezések alternatívájaként használhatja a függőleges sáv (`|`) típusok uniójának deklarálásához, az sokkal jobb és egyszerűbb. - -=== "Python 3.9+" - - Ugyanazokat a beépített típusokat használhatja általános típusként (szögletes zárójelekkel és típusokkal): - - * `lista` - * `tuple`. - * `set` - * `dict` - - És ugyanaz, mint a Python 3.6-nál, a `typing` modulból: - - * `Union`. - * `Optional`. - * ...és mások. - -=== "Python 3.6+" - - * `List`. - * `Tuple`. - * `Set`. - * `Dict`. - * `Union`. - * `Optional`. - * ...és mások. - -### Osztályok mint típus - -Egy osztályt is deklarálhat a változó típusaként. - -Tegyük fel, hogy van egy `Person` osztálya, akinek egy neve van: - -``` Python hl_lines="1-3" -{!../../../docs_src/python_types/tutorial010.py!} -``` - -Ezután deklarálhat egy változót `Person` típusúnak: - -``` Python hl_lines="6" -{!../../../docs_src/python_types/tutorial010.py!} -``` - -És akkor ismét megkapja az összes szerkesztő támogatást: - - - -Figyeld meg, hogy ez azt jelenti, hogy "a `one_person` a `Person` osztály **példánya**". - -Ez nem azt jelenti, hogy "a `one_person` a `Person` nevű **osztály**". - -## Pydantikus modellek - -A Pydantic egy Python-könyvtár adatok ellenőrzésére. - -Az adatok "alakját" attribútumokkal rendelkező osztályokként deklarálod. - -És minden attribútumnak van típusa. - -Ezután létrehoz egy példányt az adott osztályból néhány értékkel, és az érvényesíti az értékeket, átalakítja őket a megfelelő típusra (ha ez a helyzet), és ad egy objektumot az összes adattal. - -És megkapja az összes szerkesztő támogatást az eredményül kapott objektummal. - -Példa a hivatalos Pydantic dokumentációból: - -=== "Python 3.10+" - - ``` Python - {!> ../../../docs_src/python_types/tutorial011_py310.py!} - ``` - -=== "Python 3.9+" - - ``` Python - {!> ../../../docs_src/python_types/tutorial011_py39.py!} - ``` - -=== "Python 3.6+" - - ``` Python - {!> ../../../docs_src/python_types/tutorial011.py!} - ``` - -!!! info - Ha többet szeretne megtudni a Pydanticról, tekintse meg a dokumentumációját. - -Az egész **FastAPI** Pydantic-on alapul. - -Mindezekből a gyakorlatban sokkal többet fog látni a [Oktatói anyag - Felhasználói Útmutató](tutorial/index.md){.internal-link target=_blank} részben. - -!!! tipp - A Pydantic különleges viselkedést mutat, ha az `Optional` vagy a `Union[Something, None]`-t alapértelmezett érték nélkül használja. Erről bővebben a Pydantic dokumentumentációban a Kötelező opcionális mezők fejezetben olvashat. - -## Típustippek metaadat-jegyzetekkel - -A Python rendelkezik egy olyan funkcióval is, amely lehetővé teszi **további metaadatok** elhelyezését az ilyen típusú tippekben az `Annotated` használatával. - -=== "Python 3.9+" - - A Python 3.9-ben az `Annotated` a standard könyvtár része, így importálhatja a `typing` modulból. - - ``` Python hl_lines="1 4" - {!> ../../../docs_src/python_types/tutorial013_py39.py!} - ``` - -=== "Python 3.6+" - - A Python 3.9 alatti verziókban az "Annotation" importálható a "typing_extensions" modulból. - - Alapból telepítve lesz a **FastAPI**-val. - - ``` Python hl_lines="1 4" - {!> ../../../docs_src/python_types/tutorial013.py!} - ``` - -Maga a Python nem csinál semmit ezzel az `Annotated`-del. A szerkesztők és egyéb eszközök esetében a típus továbbra is `str`. - -De használhatja ezt a helyet a `Annotated` mezőben, hogy a **FastAPI-t** további metaadatokkal lássa el arról, hogyan szeretné, hogy az alkalmazás működjön. - -Fontos megjegyezni, hogy **az első *típusparaméter***, amelyet az `Annotated`-nek továbbít, a **tényleges típus**. A maradék csak metaadat más eszközöknek. - -Egyelőre csak azt kell tudnia, hogy az `Annotated` létezik, és hogy ez standard Python. 😎 - -Később meglátja, milyen **hasznos** lehet. - -!!! tipp - Az a tény, hogy ez egy **standard Python**, azt jelenti, hogy továbbra is a **lehető legjobb fejlesztői élményt** kapja meg a szerkesztőjében, a kód elemzéséhez és újrafeldolgozásához használt eszközökkel, stb. ✨ - - És azt is, hogy a kódja kompatibilis lesz sok más Python-eszközzel és -könyvtárral. 🚀 - -## Típustippek a **FastAPI-ba** - -A **FastAPI** kihasználja az ilyen típusú tippeket számos dolog elvégzésére. - -A **FastAPI**-val a paramétereket típustippekkel deklarálja, és a következőket kapja: - -* **A szerkesztő támogatása**. -* **Típusellenőrzés**. - -...és a **FastAPI** ugyanazokat a deklarációkat használja: - -* **Követelmények meghatározása**: kérési útvonal paramétereiből, lekérdezési paramétereiből, fejlécekből, törzsekből, függőségekből stb. -* **Adatok konvertálása**: a kérésből a kívánt típusba. -* **Adatok érvényesítése**: minden kérésből származik: - * **Automatikus hibák** generálása visszaküldésre kerül az ügyfélnek, ha az adatok érvénytelenek. -* **Dokumentálja** az API-t OpenAPI használatával: - * amelyet azután az automatikus interaktív dokumentációs felhasználói felületek használnak. - -Lehet, hogy mindez elvontnak hangzik. Ne aggódjon. Mindezt működés közben a [Oktatói anyag - Felhasználói Útmutató](tutorial/index.md){.internal-link target=_blank} részben láthatja. - -A fontos dolog az, hogy a standard Python típusok használatával egyetlen helyen (ahelyett, hogy több osztályt, dekorátort stb. adna hozzá), a **FastAPI** elvégzi Ön helyett a sok munkát. - -!!! info - Ha már végignézte az összes oktatóanyagot, és visszatért, hogy többet megtudjon a típusokról, jó forrás ez a "puska" a `mypy`-től.