SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement

Python – 25. časť / Django VI

0

V tejto časti seriálu sa rozlúčime s frameworkom Django, a to detailnejším opisom tretej a poslednej verzie vzorovej aplikácie s názvom Spotreba energií. Nebudeme riešiť žiadne nové problémy. Naším cieľom bude zosumarizovať všetok doterajší kód a rozšíriť ho o aktivity, v rámci ktorých sa budeme venovať zápisu odpočtov spotreby elektriny a plynu. Najvýznamnejšie rozšírenie aplikácie je doplnenie grafických prehľadov priemernej dennej spotreby jednotlivých komodít.

Sumarizácia zložiek a súborov projektu

Pripomeňme si základnú štruktúru zložiek nášho projektu Django. Koreňová zložka obsahuje podzložky s názvami projekt_energie a energie, doplnené o „správcovský“ súbor manage.py. Obsah zložky projekt_energie zostal nedotknutý okrem doplnenia šablón elektrina_base.html a plyn_base.html do podzložky templates. Obidve menované šablóny sú takmer totožnou kópiou šablóny voda_base.html. Hlavný rozdiel v ich obsahu je zmena názvu jednotlivých lokalít webovej stránky. Takéto striktné oddelenie „základových“ šablón nie je nevyhnutné, ale je vhodné v prípade, keby sme chceli v budúcnosti výraznejšie zmeniť štruktúru, resp. formátovanie jednotlivých lokalít.

Obsah zložky energie sa zmenil výraznejšie. V prvom rade z dôvodu zmeny a doplnenia nových modelov = tried = databázových tabuliek do súboru models.py sme vytvorili nové migrácie v zložke migrations. Pripomeňme, že na vytvorenie súborov s migráciami používame príkaz python3 manage.py makemigrations. Aplikáciu migrácií prostredníctvom korešpondujúcich príkazov SQL následne vykonáme príkazom python3 manage.py migrate. Samozrejme, pokiaľ sme odborníkmi na prácu s databázami, napr. s využitím prostredia MySQL Workbench, nie je pre nás najmenší problém upraviť a doplniť potrebné databázové tabuľky aj bez využitia automatizovaných služieb Djanga.

Ďalšie zmeny sme realizovali v zložke static, kde sme vytvorili samostatné podzložky pre lokality Elektrina a Plyn. Do nich sme vložili štýly CSS, na ktoré odkazujeme v rámci základových šablón jednotlivých lokalít na riadku:

Prostredníctvom základových šablón sme zmenili názvy lokalít. Pomocou súborov CSS sme zase zmenili ich farebné vyhotovenie. V prípade, že by sme chceli zmeniť farby, štýly písma, rozmery stránok alebo formátovanie ich blokov, urobili by sme to práve v rámci týchto samostatných súborov CSS.

Majoritné zmeny sme vykonali v zložke templates. V prvom rade sme skopírovali všetky súbory HTML z podzložky voda do nových podzložiek elektrina a plyn. Ich obsah sme upravili najmä z dôvodu prispôsobenia reťazcov danému druhu komodity. V prípade lokality Elektrina sme však museli obsah súborov zmeniť markantnejšie, a to z dôvodu rozdelenia odpočtu spotreby na dennú a nočnú tarifu.

 

Obr. 1 Spotreba energií v3.0 – lokality Voda, Elektrina, Plyn

 

Moduly aplikácie energie

Aplikácia energie je zložená z nasledujúcich modulov:

admin.py

Registrácia jednotlivých modelov (tried) definovaných v module models.py pre potreby administrátorského rozhrania

apps.py

Konfiguračný súbor aplikácie

models.py

Definícia modelov (tried) vrátane špecifikácie stĺpcov tabuliek

tests.py

Triedy určené na testovanie

urls.py

Deklarácie URL doplnené o všetky nové lokality obsahujúce odkazy na index, zobrazenie detailov záznamov, pridanie záznamov, zmazanie záznamov a zobrazenie grafov

views.py

Hlavná funkcionalita aplikácie

 

Najzásadnejšie a takisto najrozsiahlejšie zmeny v rámci celého projektu sme urobili v súbore views.py. Ide najmä o doplnenie funkcií, ktoré sú určené na zobrazenie stránok index, detail, add, del pre lokality Elektrina, Plyn a ďalšiu novú lokalitu Cenotvorba. Navyše sme tu však doplnili funkcie určené na zobrazenie grafov priemernej dennej spotreby jednotlivých komodít.

 

views.py

Funkcie index(), detail() a del(), ako aj funkcie voda_add() a plyn_add() sú pre všetky lokality v mnohom totožné. Odlišujú sa iba v názvoch premenných a podzložiek na správnu diferenciáciu zobrazenia jednotlivých webových lokalít. Výraznejšiu zmenu sme realizovali vo funkcii elektrina_add(), ktorú sme rozšírili o možnosť zadania spotreby pre dennú a nočnú tarifu. Tomu sme, samozrejme, prispôsobili aj príslušné stĺpce tabuľky Elektrina. Pridanie tabuľky Cenotvorba, ktorá je určená na vloženie cien za jednotky spotrebovaných komodít, nebudeme podrobne opisovať. Zameriame sa na úplne novú funkcionalitu, a to lokalitu Grafy. Prostredníctvom funkcií voda_graf(), elektrina_graf() a plyn_graf() realizujeme zobrazenie priemernej dennej spotreby konkrétnych komodít za obdobie medzi odčítaním údajov z meračov. Využívame pritom funkcionalitu a vizuálne komponenty nám známej grafickej knižnice Plotly. Odovzdanie grafu HTML šablóne riešime nasledujúcim algoritmom:

fig = go.Figure()

fig.add_trace(go.Scatter(x = x_data,y = y_data,fill = 'tozeroy'…)

fig.update_layout(template = 'plotly_dark',

                  paper_bgcolor = 'rgba(0,0,0,0)',

                  plot_bgcolor = 'rgba(0,0,0,0)',

                  title = {'text' : 'Denná spotreba vody','font' : {'color' : 'white'},'x' : 0.5},

                  margin = {'l' : 0,'r' : 0,'t' : 50,'b' : 0,'pad' : 10},

                  xaxis = {'title' : 'Dátum odpočtu','tickformat' : '%d.%m.%Y','linecolor' : 'rgba(0,0,0,0)'},

                  yaxis = {'title' : 'Denná spotreba (m3)','linecolor' : 'rgba(0,0,0,0)'})

return render(request,"voda/graf.html",context = {'gr1' : fig.to_html()})

Obr. 2 Graf priemernej dennej spotreby vody, elektriny a plynu

 

Uvedeným algoritmom vytvárame objekt triedy plotly.graph_objects.Figure(), do ktorého vkladáme tzv. Scatter líniový typ grafu (trieda plotly.graph_objects.Scatter) s vypĺňaním spodnej časti grafu smerom k nulovej súradnici osi Y. Funkciou update_layout() upravujeme vzhľad grafu vrátane špecifikácie názvu grafu a názvov jednotlivých osí. Následne objekt fig odovzdávame konkrétnej HTML šablóne graf.html pomocou funkcie to_html() nízkoúrovňového rozhrania plotly.io. Viac informácií, ktoré sa týkajú témy renderingu grafov Plotly, možno naštudovať na stránke https://plotly.com/python-api-reference.

 

Marek Sopko

Zobrazit Galériu

Marek Sopko

Všetky autorove články

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať