Generátor sportovních kurzů

Veronika Štěpáníková
16 min readDec 10, 2017

--

(Závěrečný projekt Digitální akademie Czechitas)

Ahoj, vítám Vás na svém blogu!!!

Tento blog bude sloužit převážně k popisu mého projektu, který jsem zpracovávala v rámci Digitální akademie pořádané organizací Czechitas. Ještě než se dostanu k popisu projektu, chtěla bych se Vám na úvod zmínit o své cestě k Digitální akademii. Pro ty neznalé bych také chtěla alespoň trochu přiblížit, co je Czechitas a Digitální akademie. Doufám, že Vás můj blog nebude příliš nudit a že Vám může být alespoň trochu užitečný při tvorbě Vaší aplikace :)

Pár slov o mně a o tom, jak jsem se dostala k Digitální akademii:

Troufám si říct, že mnoho studentů (především z humanitních oborů) si na konci studia začíná uvědomovat, že ačkoli byl jejich obor velmi zajímavý a třeba i společensky prospěšný, tak na trhu práce je jeho uplatnění nulové. Ani já nejsem výjimkou. Vystudovala jsem mezinárodní teritoriální studia, zkráceně a srozumitelně: rozvojová studia. Můj obor se primárně zabýval otázkou, jak zamezit problémům rozvojových zemí. Tento obor byl ve své podstatě směsicí více oborů: ekonomie, mezinárodních vztahů, environmentalistiky a sociologie. Na konci studia se k těmto oborům připojila i statistika, která mě velmi zaujala. Z toho důvodu jsem se i přes své téměř mizivé znalosti rozhodla, že ji využiji při psaní své diplomové práce. Musím upozornit, že jsem tehdy znala a využívala jen software SW Statistika. Stačilo mi to ale k tomu, abych si uvědomila, že bych po škole chtěla pracovat s daty. Zlom nastal ve chvíli, kdy jsem ukončila studium a začala si hledat práci. Velmi rychle jsem si uvědomila, že SW Statistika mi opravdu nestačí a že bez SQL a dalších nástrojů datové analýzy se jednoduše neobejdu. V té době se zrovna otevíral kurz digitální akademie, a tak jsem si řekla proč to nezkusit. Nemám přece co ztratit. :)

Co je Czechitas a Digitální akademie?

Asi většina z těch, kteří budou tento blog číst, zná společnost Czechitas a jejich projekty, které se zaměřují na vzdělávání žen a dětí v IT. Pro ty, kteří o Czechitas doposud neslyšeli, uvedu ve stručnosti pár důležitých informací.

Czechitas pořádá kurzy, v rámci kterých se účastníci (účastnice) mohou naučit nejrůznější IT technologie — od psaní webu přes programování, až po zpracování dat. Jedním z projektů Czechitas je i Digitální akademie. Digitální akademie je ve zkratce 2–3 měsíční intenzivní kurz datové analýzy. V rámci kurzu se účastnice učí zpracovávat a vizualizovat data. V průběhu studia si osvojují práci s různými typy nástrojů datové analýzy – například s MS SQL, Pythonem, Excelem a s Power BI. Účastnice mimo jiné získávají povědomí o základních statistických ukazatelích, o ETL nástrojích a také o marketingu. Součástí kurzu jsou i karierní workshopy a pravidelné exkurze v partnerských firmách. Jedním z nejdůležitějších úkolů je v digitální akademii tvorba závěrečného projektu, při kterém si uchazečky vyzkouší aplikovat své nově nabité znalosti v praxi :) Po absolvování akademie by se z účastnic měli ideálně stát kvalifikované uchazečky o juniorní pozice předpokládající práci s daty.

Úvod k projektu

Jak již bylo řešeno, nedílná část digitální akademie spočívá v tvorbě projektu, který by měl reflektovat to, co se účastnice během kurzu naučily. S projektem účastnicím pomáhají zkušení mentoři. Přidělení mentorů probíhá na poznávacím večeru, kde se účastnice s mentory setkají a společně probírají možnosti vzájemné spolupráce na projektu. Ještě před tímto večerem by si každá z účastnic měla připravit návrh tématu, které by jí bylo blízké a které ji zajímá.

Před poznávacím večerem mě napadala spousta možných témat, které by bylo zajímavé zpracovat. Asi nejzajímavější mi připadalo vytvoření aplikace, která by sloužila ke srovnávání jazykových škol, podle konkrétních časových možností uživatele. Ještě, než jsem nastoupila na digitální akademii, jsem totiž řešila situaci, kdy jsem si chtěla zapsat jazykový kurz, ale měla jsem čas pouze v pondělí večer. Abych si našla kurz, který by odpovídal mým časovým možnostem, musela jsem si „prolistovávat“ webové stránky každé jazykové školy zvlášť, což mi zabralo možná až zbytečně mnoho času, nemluvě o rozhodování, která škola by byla ta nejvhodnější.

Mentorem mého projektu se po poznávacím večeru stal pan Martin Zelený, který v současné době pracuje na pozici testera ve společnosti Red Hat. S Martinem jsme se shodli, že by mohlo být reálné vytvořit alespoň prototyp výše zmíněné aplikace. Po určitých peripetiích jsme se nakonec dohodli na mírné změně tématu, kdy jsme se zaměřili raději na sportovní kurzy.

Cíl projektu:

Cílem mého projektu byla tvorba aplikace (nebo alespoň jejího prototypu), která by sloužila jako generátor sportovních kurzů dle konkrétních časových možností uživatele. Aplikace by měla fungovat tak, že si uživatel uvnitř konzole (či na webu) zadá svůj preferovaný typ sportovního kurzu, ideální den a čas. Po zadání požadavku by mělo dojít k vygenerování jednoho nebo i více sportovního center, které nabízí kurz odpovídající požadovaným parametrům. Kromě názvu sportovního klubu by mělo dojít také k vygenerování typu sportu, dne, začátku a konce lekce a ceny za lekci. K dosažení cíle by měly být využity především dva hlavní nástroje – Python a SQL, případně pokud se aplikace umístí na web, tak ještě HTML. Co se týče sběru dat, tak původním plánem bylo automatické „scrapování“ dat z rozvrhů z internetových stránek konkrétních sportovních klubů. Jelikož je však tato technika velmi náročná i pro pokročilejší programátory, rozhodla jsem se zvolit jinou metodu.

Sběr dat

Základním stavebním kamenem téměř každého projektu, zabývajícího se datovou analýzou, je sběr dat. S Martinem jsme probírali různé možnosti, jak data získat. Rozhodli jsme se využít spíše metody, které budou pro mě, jakožto pro začátečníka jednodušší.

Původní návrh byl vypsat si na webových stránkách sportovních center data z rozvrhů a uložit si je do mnou vytvořené relační databáze v Excelu. Z hlediska nízké sofistikovanosti zmíněné metody jsme ovšem zvolili jinou možnost. Ve světě datové analýzy se často stává, že analytici či programátoři dlouho čekají, než dostanou relevantní data. Aby neztráceli čas a mohli v mezičase pracovat na projektu (například na tvorbě aplikace :)), musí si data určitým způsobem vytvořit sami. Rozhodla jsem se tedy, že tento způsob vyzkouším i v mém projektu.

Tvorba databáze:

Prvním cílem mého projektu bylo vytvořit soubor dat, který by sloužil jako prototyp inspirovaný skutečnými daty. Generátor pseudo-náhodných dat je možné vytvořit například v Pythonu. K tomuto účelu je zde zabudovaná knihovna “Random“, kterou si uživatel může jednoduše vyvolat pomocí slovního spojení “import random“. V modulu Random je možné buď vybírat jakákoli náhodná čísla (pomocí metody „random.randint()“) anebo vybírat náhodné prvky ze seznamu (pomocí metody „random.choice()“).

Aby se data v mém projektu podobala skutečnosti co nejvíce, bylo nutné vytvořit několik proměnných obsahujících seznamy dat. První proměnná obsahovala seznam se jmény sportovních center (inspirovaný skutečnými sportovními kluby v Brně), druhá zahrnovala seznam s několika typy sportů, které se ve sportovních klubech obvykle vyučují, třetí proměnná obsahovala seznam dnů (od pondělí do soboty) a čtvrtá proměnná zahrnovala seznam různých cen za lekci. Ve výše zmíněných seznamech se nevyskytovaly údaje o čase. Aby byl čas lekcí co nejvíce podobný skutečnosti, byly zde vytvořeny proměnné: “Začátek od“ a “Začátek do“, čímž se mělo zamezit situaci, kdy by generátor náhodně vybíral začátek sportovní lekce například v 1:00. Na takovou lekci by totiž asi nikdo nedorazil :). Začátek lekce byl nastaven na 7:00 a konec na 20:00. Mimo jiné zde byly uvedeny dvě různé délky lekce: 45 minutová a 60 minutová. Cena a délka lekcí byly do databáze vloženy spíše z důvodu, aby měl uživatel více možností při rozhodování. Pro lepší představu o proměnných a jejich seznamech je níže přiložen obrázek. Za povšimnutí stojí, že cena, a časy jsou typu „integer“ (celé číslo), zatímco ostatní proměnné jsou typu „string“ (řetězec).

Následující část již spočívala v náhodném výběru časů a údajů ze seznamů.

Hned v prvním řádku druhé části skriptu došlo k tvorbě proměnné “celkem“, která je rovna hodnotě 500. Tato hodnota představuje velikost databáze. Výsledný soubor by měl tedy obsahovat 500 řádků, přičemž každý z řádků představuje náhodné kombinace sportovních lekcí, časů, cen a klubů.

Do druhého řádku byla uložena proměnná “seznam_radku“, která obsahuje seznam dat typu “string“. Data uvnitř proměnné “seznam_radku“ (“ID“,“sport“,…) představují první řádek datového souboru (záhlaví tabulky).

Po tvorbě proměnné ID odpovídající hodnotě nula, následoval cyklus. Při každém „projetí“ cyklu se hodnota ID zvětšila o jednotku. Jedno „projetí“ cyklu znamenalo přidání jednoho řádku do databáze. Do každého řádku se postupně přidávaly jednotlivé hodnoty (viz proměnná “lekce“). Ještě před jejím „spuštěním“ byly ovšem vytvořeny tři nové proměnné.

První z nich byla proměnná “zacateklekce“. Tato proměnná sloužila k tvorbě začátků lekcí. Představovala náhodný výběr hodin od 7:00 (“zacatek_od“) až do 20:00 (“začátek_do“). Druhou nově vzniklou proměnnou byl “nahodny_konec“, který představoval výběr náhodného konce lekce ze seznamu uvnitř proměnné “delka_lekce“. Určoval tedy, jestli bude mít lekce 45 nebo 60 minut. Proměnná představující délku lekce však musela být napojená na předchozí proměnnou, tedy na tu, představující začátek lekce. V případě, že by tomu tak nebylo, lekce by mohla začít například v 15:00 a nelogicky skončit v 18:45. Celá proměnná “delka_lekce“ musela být mimo jiné „zabalena“ do metody „datetime.timedelta()“. Předtím ovšem muselo dojít k importu knihovny (modulu) datetime, přičemž “zacatek_lekce“ byl uveden v řádu hodin, zatímco “nahodny_konec“ v řádu minut. Třetí vytvořená proměnná s názvem „konec_lekce“ sloužila spíše k úpravě druhé proměnné “nahodny_konec“, jejíž výsledek by jinak obsahoval i sekundy, což by po vizuální stránce nebylo zcela atraktivní.

Uvnitř cyklu byla vytvořena nová proměnná s názvem “lekce“, která sloužila k tvorbě řádku s údaji o každé sportovní lekci. Nejdříve se do řádku přidalo ID, poté sportovní klub, dále sport, den, začátek lekce, konec lekce a nakonec cena. Všechny proměnné uvnitř “lekce“, mimo začátku a konce lekce, byly zabalené do metody „random.choice()“, čímž docházelo k náhodnému výběru prvků ze seznamů uvnitř proměnných. Je možné si povšimnout, že za proměnnou “zacateklekce“ je umístěný řetězec tvořený dvěma nulami. Do řádku jsou zakomponovány pouze pro vizuální efekt, aby se začátek lekce uváděl ve formátu hodiny: minuty. Bez tohoto řetězce by se začátek lekce uváděl pouze v hodinovém formátu.

Všechny proměnné uvnitř “lekce“ byly ukládány do řádku pomocí typu „string“ čili řetězce a odděleny čárkami. Cílem tohoto kroku bylo ukládat vytvořená data do proměnné “seznam_lekcí“ v takovém formátu, aby bylo možné s daty dále pracovat v SQL. SQL je velmi dobrý nástroj pro provádění tzv. selektů neboli výběrů určitých dat ze souboru.

Existuje několik způsobů, jak přenést data, vytvořená pomocí skriptu z Pythonu, do SQL. Jednou z možností je například tvorba souborového formátu, ze kterého by program SQL mohl jednoduše přečíst a importovat data. V mém projektu jsem zvolila tvorbu souboru ve formátu CSV. CSV je zkratka pro Comma-separated values, neboli hodnoty oddělené čárkami. Soubor ve formátu CSV je složen z řádků, ve kterých jsou jednotlivé položky odděleny znakem čárka. Hodnoty položek v souboru CSV bývají velmi často uzavřeny do uvozovek.

Tvorba CSV

Jak jsem se již zmínila, další částí projektu byla tvorba souboru CSV. V Pythonu jsem soubor CSV tvořila pomocí následujícího skriptu:

Aby mohlo dojít k vytvoření souboru CSV, bylo nejdřív nutné importovat knihovnu (modul) CSV. Modul CSV má v Pythonu dvě varianty. Buď je možné CSV vytvářet, anebo z něj „číst“. Skriptu pro tvorbu CSV se říká „CSV writer“, zatímco skriptu pro čtení z CSV se říká „CSV reader“.

Pokud uživatel plánuje v Pythonu číst či psát CSV soubor, musí ve svém kódu vždy začínat slovním spojením „with open“ (metoda zajišťující otevření souboru), za kterým ihned následuje závorka, která obsahuje název CSV souboru (v mém případě “try.csv“). Za názvem souboru se do uvozovek ukládá zkratka pro čtení nebo pro psaní do souboru (pro psaní zkratka “w“). Poté následuje informace o tom, jak je třeba označit nový řádek (v mém případě uvozovkami). Na konci řádku se stanovuje zkratka pro alias - AS (neboli) za níž následuje název souboru (v mém případě csvfile).

Na další řádek se zpravidla ukládá nová proměnná “csv_writer“, která obsahuje další důležité argumenty pro tvorbu CSV souboru. Určuje metodu “.writer”, způsob oddělení proměnných “delimiter” a charakter uvozování hodnot “quotechar”. Tyto argumenty by při tvorbě nového souboru neměly chybět.

Aby soubor nebyl prázdný, bylo nutné vytvořit cyklus pro zapisování hodnot do souboru. V mém případě jsem si uvnitř seznamu řádků vytvořila novou v podstatě imaginární proměnnou “subjekt“, která představovala každou hodnotu uvnitř seznamu řádků. Jelikož byla proměnná “seznam_radku“ typu seznam, proměnná “subjekt“ nabývala hodnot od 0 do 6 (subjekt[0] zastřešovala proměnnou “ID“, zatímco subject[6] zastřešoval proměnnou “cena“ z původního seznamu řádků). Při každém proběhnutí cyklu se pomocí metody .writerow() zapsal nový řádek do CSV souboru.

Ve svém projektu jsem se při tvorbě CSV a následném importu do SQL setkala s řadou problémů. Abych uvedla příklad, tak původně jsem tvořila proměnnou “lekce“ přímo s uvozovkami (viz skript níže).

Výsledek sice v konzoli vypadal podle mých představ, ovšem při otevření souboru např. v CSV či v SQL byly hodnoty položek odděleny hned třemi uvozovkami J. Problém s uvozovkami nebyl jediným problémem. Stalo se mi například také to, že se řádky uvnitř proměnné “senam_lekci“ neukládaly pod sebe, ale vedle sebe. Soubor pak nebylo možné v SQL načíst, respektive všechny hodnoty v seznamu řádků se uložily do sloupců.

Během psaní skriptu jsem si také vyzkoušela způsob, jak přesunout skript z Pythonu přímo do programu SQL (respektive SQLite), aniž bych tvořila soubor CSV. Většinou se skript v Pythonu propojuje do CSV pomocí několika funkcí. První z nich slouží k připojení se k již existující databází v SQLite, druhá slouží k tvorbě tabulky a třetí k vložení dat. Nejsem si jistá, kde přesně nastal problém, ale skript nedokázal tvořit tabulky uvnitř existující databáze. Tabulku sice vytvořil ale pouze imaginární. Z toho důvodu jsem se raději rozhodla pracovat s CSV souborem.

Práce v SQL

Původním záměrem bylo testovat můj nově vytvořený soubor v MS SQL. Po domluvě s Martinem jsme se ovšem jednoduchost a studijní účely rozhodli, že bude lepší pracovat s SQLite3, která oproti MS SQL neobsahuje databázový server.

Ještě před prováděním příkazů v SQL, bylo nutné vytvořit novou databázi, do které se umístila tabulku. Do tabulky jsem importovala soubor ve formátu CSV, který jsem v předchozím kroku vytvořila v Pythonu. Databázi jsem přiřadila název „test“ a tabulku jsem pojmenovala slovem „try“.

Hned na počátku testování mé databáze jsem narazila na menší problém, jelikož při přesunu dat ze souboru CSV do SQLite3 došlo k poškození háčků a čárek u všech dnů. SQL je naštěstí na takovéto situace připraveno funkcemi „set“ a „update“. Jakmile jsem data upravila, mohla jsem začít testovat a získávat tak první pohled na to, jak by výsledky mého projektu mohly ve finále vypadat.

Přesun tabulky z SQLite3 do Pythonu

Jakmile jsem si vyzkoušela selektování v SQL a zjistila jsem, že má databáze funguje, bylo možné z databáze vytvořit aplikaci, která by komunikovala s uživatelem. Z toho důvodu musela být přenesena zpět do Pythonu.

Pro případy, kdy se předpokládá přenesení dat z SQLite3 do Pythonu, existuje knihovna s názvem SQLite3. Knihovnu lze v Pythonu využívat ihned po jejím importu. Spolupráce mezi SQL a Pythonem začíná zpravidla tvorbou proměnné, kterou jsem označila jako “db“. Proměnná “db“ se pomocí metody „.connect()“ připojuje k existující databázi “test.db“. Pro komunikaci mezi Pythonem a SQL slouží metoda „.cursor()“. Díky ní je možné provádět SQL selekty uvnitř Pythonu. V mém kódu jsem metodu „.cursor“ připojila k proměnné “db“. Aby program komunikoval s uživatelem a mohlo tak dojít k vytvoření požadované aplikace, bylo nutné pracovat s metodou „input“. Metoda „input“ vyžaduje od uživatele nějaký „vstup“. Pro účely mé aplikace bylo potřeba od uživatele zjistit, co by rád dělal za sport, jaký den má čas a jaká hodina by pro něj byla ideální. Z toho důvodu byly vytvořeny tři různé proměnné. První reprezentovala zadaný sport, druhá zadaný den a třetí čas. Zadaný parametr byl pomocí přetypování uveden ve formátu „string“. Přetypování bylo provedeno kvůli snadnému selektování dat z databáze, které byly rovněž vytvořeny v podobě řetězce.

Po zadání hodnot od uživatele bylo jen potřeba vybrat požadované hodnoty. K tomuto úkolu se využívá metody „.execute()“, která se zpravidla pojí k proměnné “cursor“. Příkaz se uvnitř funkce execute píše zpravidla stejně, jako je tomu v SQL (čili například v podobě SELECT * FROM try …). Za slovem „WHERE“ je ovšem možné využít kód napsaný v Pythonu. V mém případě byl využit, aby vybíral přesně ty proměnné, které uživatel zadal. Co se týče selektování, tak za zmínku stojí, že jsem uživateli nenechala zobrazit proměnnou “ID“. Dle mého názoru totiž pro uživatele není relevantní.

Výše popisovaný kód je pro lepší přehlednost vyobrazen na následujícím obrázku:

Pokud by si uživatel zadal, že by chtěl dělat bossu a měl by čas v úterý v 15:00, ukázaly by se mu následující výsledky:

Uživatel má v tomto případě na výběr ze tří lekcí. Každá se nachází v jiném sportovním klubu. Tento fakt by mohl být rozhodujícím při výběru. Uživatel by si lekci mohl vybrat mimo jiné i podle ceny a délky, což se netýká zrovna tohoto případu :).

V této fázi měla aplikace ještě silné nedostatky. Zároveň byla vytvořena pouze uvnitř konzole. Jelikož mě vždy fascinovala tvorba webových stránek, chtěla jsem, aby i má aplikace byla uložena na webu. Zároveň jsem chtěla, aby byla určitým způsobem „hmatatelná“. Mým plánem bylo umístit ji na web, případně alespoň na lokální web (localhost).

Tvorba webové aplikace

Tvorba webové aplikace z Pythonu není úplně jednoduchá. Musím se přiznat, že mě překvapilo, že jsem k její tvorbě potřebovala mnohem více času a pomoci, než jsem původně očekávala…

Základem tvorby webové aplikace z Pythonu je určení toho, jakým způsobem a pomocí jakého modulu se bude aplikace vytvářet. Pro tvorbu své webové aplikace jsem se rozhodla využít modul „Flask“, který je dle mnoha článků považován za jeden z jednodušších modulů. Mimo Flask existují další moduly (např. Django).

Tvorba aplikace pomocí modulu „Flask“ musí proběhnout v následujících krocích. V prvé řadě je potřeba instalace modulu „Flask“ pomocí příkazu „Pip Install Flask“ uvnitř příkazového řádku. Poté je zapotřebí vytvořit dvě složky. První složka může nést jakýkoli název. Do této složky je nutné umístit druhou složku s názvem “templates“. Po těchto krocích je možné tvořit soubory. První soubor slouží jako skript v Pythonu. Tento skript musí být vždy uložený v první složce, nikoli ve složce “templates“. Do složky “templates“ se pak ukládají další soubory, zpravidla ve formátu „HTML“ (čili ve formátu webové stránky).

Pro lepší představu o průběhu tvorby kódu zde přikládám obrázek. Jednotlivé kroky popíšu níže.

Při tvorbě webové aplikace pomocí modulu „Flask“ je opět zapotřebí začít importem knihovny „Flask“. Mimo jiné je nutné importovat také „render_template“, „request“, „url_for“ a knihovnu „SQLite3“.

Po importech jsem si vytvořila novou proměnnou s názvem “db“ podobající se „db“ ze skriptu pro tvorbu aplikace v konzoli. Proměnná “db“ sloužila k připojení se k databázi, která byla vytvořena v SQLite3 a do které jsem vložila data o sportovních kurzech. Připojení se k databázi se uskutečnilo pomocí metody „.connect()“, která obsahovala dva atributy. První z nich sloužil jako cesta k mnou vytvořené databázi a druhý: „check_same_thread = False“ byl použit k tomu, aby se k databázi dalo připojovat i z jiných „vláken“ sloužících pro spuštění funkce. Za proměnnou “db“ následuje proměnná app = obsahující funkci „Flask“ s atributem „__name__“. Tato proměnná se při tvorbě aplikace pomocí modulu „Flask“ musí vždy vytvořit.

Za popisovanými proměnnými následují dvě funkce, před kterými je vždy uvedeno slovní spojení @app.route určující směr nebo také cestu, podle které se tvoří aplikace. První z funkcí se jmenuje „webovka“. Při projetí této funkce si aplikace pomocí „render_template“ vezme parametry souboru HTML s názvem „web.html“. Soubor „web.html“ umožňuje vytvořit webovou stránku, která kromě různých nadpisů a popisků obsahuje také formulář, který umožnuje vytvoření “oken“ a popisků k těmto oknům (viz obrázek níže). Soubor ovšem v tuto chvíli ještě nebyl schopen přijmout parametry zadané uživatelem.

Skript uvnitř souboru „web.html“ vypadal následovně:

V kódu je možné povšimnout si tagu (štítku) „form“ s parametrem action“ který umožňuje vytvořit formulář (obrázek formuláře je uveden výše). „Url_for“ umožňuje spojení s druhou funkcí s názvem „handle_data“. Tato funkce je uložena ve skriptu v Pythonu a k jejímu popisu se dostanu posléze. Metoda, se kterou funkce pracuje je typu „post“, což znamená, že uživatel bude moci do webového formuláře (vytvořené pomocí funkce „webovka“) zadávat své požadavky. Každé okénko uvnitř formuláře musí přijímat textové hodnoty. První z okének bude pracovat s proměnnou “chcesport“, druhé s proměnnou “chceden“ a třetí s proměnnou “chcecas“.

Co se týče pokračování skriptu v Pythonu tak za funkcí s názvem “webovka“ následuje funkce s názvem “handle_data“. Na skutečné webové stránce je možné si tuto funkci vyvolat doplňkem v url (v podobě www…..com/handle_data). Funkce „handle_data“ pracuje s metodou „post“, jelikož od uživatele očekává nějakou aktivitu. Předpokládá tedy, že si uživatel do předpřipravených oken zadá své požadavky. Aby si ovšem mohl uživatel určit svůj ideální sport, den a čas, musí dojít k vytvoření proměnných, které poznají, co která kolonka znamená (“chcesport“, “chceden“, “chcecas“).

Po tvorbě proměnných “chcesport“, “chceden“ a “chcecas“ lze pracovat s SQL selektem, který je stejný, jako v předchozím skriptu, kdy jsem tvořila aplikaci uvnitř konzole. Za pozornost stojí nově vytvořená proměnná “items“ zahrnující metodu „.fetchall()“, čímž se do této proměnné ukládají veškeré vybrané hodnoty z SQL. Jakmile se vše uloží, funkce „handle_data“ si pomocí „render_template“ vezme parametry z HTML souboru s názvem „result.html“.

Soubor „result.html“ je uveden na následujícím obrázku:

Tento soubor má parametry webové stránky. Kromě toho pracuje s proměnou „items“ obsahující hodnoty vybrané SQL příkazem. Soubor “result.html“ pracuje také s proměnnou „pocet“, která byla vytvořená v Pythonu a mimo jiné představovala délku proměnné “items“. Jelikož proměnná “items“ obsahovala hodnoty typu „string“, tak je nyní možné tyto hodnoty oddělit pomocí hranatých závorek a indexu (item[0], item[1] apod.). Za povšimnutí stojí také to, že mnoho hodnot a příkazů je zde uloženo do tzv. chlupatých závorek ({}). Díky těmto závorkám HTML „komunikuje“ s Pythonem.

V souboru „result.html“ je mimo jiné možné pozorovat podmínku „if“, která umožní oznámit uživateli, že žádná lekce není k dispozici (v případě, že uživatel zadá takové parametry, které neodpovídají žádné lekci z databáze). V takovém případě konzole oznámí uživateli větu: „Žádná lekce neodpovídá zadání”

Aplikaci se mi bohužel prozatím nepodařilo dostat na veřejně přístupnou webovou stránku, ale abyste si ji mohli co nejdříve vyzkoušet, budu na ni usilovně pracovat! V tuto chvíli zde alespoň přikládám obrázek z lokálním webu:

Pokud je výsledek požadavků uživatele validní, může vypadat následovně:

Návrhy práce s projektem do budoucna:

Můj projekt není zcela perfektní. Jsou zde nevyřešené otázky, které je třeba doladit. V prvé řadě bych se chtěla zaměřit na umístění aplikace na web, aby uživatelé měli přístup k této aplikaci. Do budoucna bych ráda pracovala se skutečnými daty, zpočátku například pomocí API a časem třeba i pomocí „scrapování“ z webu. Určitě bych se v budoucnu chtěla zaměřit i na mimo-brněnská sportcentra.

Jakmile budu mít skutečná data, ráda bych rozšířila rozsah datového souboru o jméno lektora, případně o mapu s adresou sportcentra. Ráda bych se také zaměřila na hezčí design webových stránek, například pomocí CSS. Pokud by se vše podařilo, dalo by se uvažovat o tvorbě její mobilní verze.

Na závěr bych moc chtěla poděkovat Martinu Zelenému za jeho pomoc a velkou ochotu a také Czechitas, díky které jsem se toho spoustu naučila!!!

Odkazy:

Czechitas: https://www.czechitas.cz/

Digitální akademie: https://www.czechitas.cz/cs/co-delame/digitalni-akademie

Stack overflow: https://stackoverflow.com/

--

--