NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Lekce 2 - Seznámení s FastAPI frameworkem pro Python

V minulé lekci, Úvod do FastAPI frameworku a webových aplikací v Pythonu, jsme absolvovali úvod do webových aplikací prostřednictvím frameworku FastAPI.

V dnešním tutoriálu webových aplikací s frameworkem FastAPI se vrhneme na samotný framework. Nejprve si jej nainstalujeme a poté vytvoříme svou první webovou aplikaci v Pythonu.

Instalace FastAPI

Pro instalaci FastAPI (v kurzu budeme používat verzi 0.104.0) potřebujeme Python ve verzi 3.10 nebo novější, s tím budeme počítat i v kurzu. Budeme potřebovat také server, konkrétně Uvicorn. Uvicorn je ASGI (Asynchronous Server Gateway Interface) server, který se často používá pro nasazení webových aplikací vytvořených pomocí FastAPI. Oba balíčky nainstalujeme následujícími příkazy, které vložíme do příkazového řádku terminálu:

Instalace FastAPI:
pip install "fastapi"
pip install "uvicorn[standard]"

To je prozatím vše, co budeme potřebovat. V příkazovém řádku uvidíme výstup (zde zkrácený, protože je poněkud dlouhý):

Výstup instalace:
C:\Users\tomse>pip install "fastapi"
Collecting fastapi
  Obtaining dependency information for fastapi from https://files.pythonhosted.org/packages/f3/4f/0ce34195b63240b6693086496c9bab4ef23999112184399a3e88854c7674/fastapi-0.104.1-py3-none-any.whl.metadata
  Downloading fastapi-0.104.1-py3-none-any.whl.metadata (24 kB)
...
Successfully installed annotated-types-0.6.0 anyio-3.7.1 fastapi-0.104.1 idna-3.4 pydantic-2.4.2 pydantic-core-2.10.1 sniffio-1.3.0 starlette-0.27.0 typing-extensions-4.8.0

Collecting uvicorn[standard]
  Obtaining dependency information for uvicorn[standard] from https://files.pythonhosted.org/packages/79/96/b0882a1c3f7ef3dd86879e041212ae5b62b4bd352320889231cc735a8e8f/uvicorn-0.23.2-py3-none-any.whl.metadata
  Using cached uvicorn-0.23.2-py3-none-any.whl.metadata (6.2 kB)
...
Successfully installed click-8.1.7 colorama-0.4.6 h11-0.14.0 httptools-0.6.1 python-dotenv-1.0.0 pyyaml-6.0.1 uvicorn-0.23.2 watchfiles-0.21.0 websockets-12.0

Pozor, musíme dodržet přesné verze modulů, komponent a zkrátka všech verzovaných prvků! Ve FastAPI budeme později vytvářet docela pokročilý projekt, který závisí na množství knihoven, databázi atd. Použít nejnovější verzi nějaké komponenty, která zrovna včera vyšla, opravdu není dobrý nápad. Projekt pak bez odborné úpravy pravděpodobně nebude fungovat! Za dobrý příklad poslouží knihovna Pandas, která ve verzi 2.0 ztratila podporu pro metodu append(). Nahradila ji metoda concat(), samozřejmě s jinou syntaxí. U verzí knihoven, modulů atd. zkrátka neplatí jako např. u aktualizace Windows, že chceme každý den používat tu nejnovější. Neustálé aktualizace všeho by totiž vyžadovaly každodenní a komplexní změny kódu projektu a reálně se tak neprovádějí. Ze stejného důvodu i my aktualizujeme kurzy v pravidelných intervalech a nové verze k sobě pak sladíme tak, aby vše fungovalo.

Vytvoření projektu

Vytvoříme si pracovní složku pro nový projekt s názvem mysite/. FastAPI nám nechává volnou ruku a na rozdíl od např. Djanga nevyžaduje žádnou konkrétní strukturu projektu. My si tedy jen v naší složce mysite/ vytvoříme soubor main.py. A to je vše, prozatím se nám všechen kód vejde do jediného souboru. Jde to vážně fast, že? :)

Vytvoření aplikace Hello World

V nastaveném minimalismu budeme pokračovat. Podržíme se nepsaného pravidla a jako první FastAPI aplikaci vytvoříme "Hello World". Také v tomto případě budeme raz dva hotoví.

Na první řádek v našem main.py přijde tradičně specifikace závislostí, které chceme do naší aplikace importovat, v našem případě zatím pouze:

from fastapi import FastAPI

Pod tím vytvoříme instanci třídy FastAPI, kterou jsme si právě naimportovali. Třída obsahuje veškerou potřebnou funkcionalitu frameworku:

app = FastAPI()

Obvykle se instance FastAPI ukládá do proměnné pojmenované právě jako app. Název je ve skutečnosti na nás, jde jen o konvenci. Pokud ale použijeme vlastní název, trochu se tím změní kód a příkaz na spuštění serveru. To ale uvidíme za chvíli.

Teď už jen vytvoříme funkci, která vrátí obligátní hlášku:

@app.get("/")
async def index():
    return {"message": "Hello World"}

A to je celé, doslova pár řádků a máme hotovou aplikaci!

V prvním řádku funkce, kterou jsme teď napsali, je dekorátor. FastAPI je používá k definici cest (často se také pro ně používají termíny "endpoint" nebo "routa") a operací, tedy HTTP metod, které udávají druh požadavku a specifikují akci, která má být provedena na nějakých zdrojích. V našem případě tedy kód říká: "Níže definovaná funkce index() má na starosti GET požadavky mířící na adresu "/"".

Všimněme si, že dekorátor app() odpovídá naší proměnné app, v níž je uložená instance FastAPI. Pokud bychom si proměnnou pojmenovali třeba my_awesome_app, měla by naše funkce index() dekorátor @my_awesome_app.get("/").

Ve druhém řádku definujeme dekorovanou funkci index(). Slůvko async říká, že půjde o tzv. asynchronní funkci. FastAPI je podporuje defaultně. My jejich výhody zatím nepocítíme, ale je určitě dobré o nich vědět. Je to jedna z předností frameworku. Vynecháním async by se z naší index() funkce stala běžná funkce a fungovala by úplně stejně.

Ve zkratce, princip asynchronního kódu umožňuje vykonávat několik operací paralelně, aby některá z těch pomaleji prováděných "nebrzdila" celou aplikaci.

No a nakonec ve třetím řádku jen vracíme požadovanou odpověď ve formátu JSON.

Spuštění serveru

Z úvodní lekce již víme, že pro to, abychom mohli k naší aplikaci přistoupit přes webový prohlížeč, potřebujeme server.

Jako server budeme používat Uvicorn, který jsme si nainstalovali na začátku lekce. Spuštění serveru provedeme zadáním stejnojmenného příkazu. K tomu potřebujeme otevřít příkazový řádek ve složce mysite/, kde se nachází náš soubor s aplikací, tedy main.py.

Zadáme příkaz:

uvicorn main:app

Po chvíli se do konzole vypíše:

Server běží:
INFO:     Started server process [14972]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

Všimněme si, že parametr app v uvicorn příkazu je opět stejný jako název proměnné app s naší instancí třídy FastAPI. Název Main naopak odpovídá jménu modulu obsahujícího aplikaci, v našem případě tedy main.py.

Naše aplikace nyní běží na lokálním serveru na adrese http://localhost:8000/. Zadáme tuto adresu do svého webového prohlížeče nebo klikneme na odkaz v konzoli. Uvidíme výsledek našeho snažení:

{
    "message": "Hello World"
}

V příkazovém řádku budeme vypisovat všechny požadavky na server.

Pokud budeme chtít server ukončit, stiskneme Ctrl + C.

Zdrojový kód je přiložený na konci lekce.

V příští lekci, Path a query parametry ve FastAPI, si vysvětlíme rozdíly mezi path a query parametry a přiblížíme si význam typových anotací a nepovinných parametrů funkcí.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 135x (640 B)

 

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Předchozí článek
Úvod do FastAPI frameworku a webových aplikací v Pythonu
Všechny články v sekci
FastAPI - Tvorba webů v Pythonu
Přeskočit článek
(nedoporučujeme)
Path a query parametry ve FastAPI
Článek pro vás napsal Tomáš Severa
Avatar
Uživatelské hodnocení:
19 hlasů
Aktivity