
ML a neurónové siete v praktických príkladoch / 9. časť: Framework Django pre webové aplikácie na báze Pythonu
V predchádzajúcich častiach seriálu sme ukázali, ako naprogramovať model neurónovej siete v programovacom jazyku Python s využitím knižnice PyTorch a ako ho natrénovať, či už to bola detekcia rizika ochorenia, rozlíšenie jedlých a jedovatých húb, alebo rôzne kategorizácie, a ukázali sme aj jednoduchú neurónovú sieť schopnú generovať text. Ak chcete odladený kód v Pythone sprístupniť napríklad formou webovej aplikácie s používateľsky príjemným rozhraním, potrebujete na to vhodný framework. K dispozícii sú frameworky Django, Taipy, Streamlit a mnohé ďalšie. V článku predstavíme populárny open source framework Django.
Framework je súprava nástrojov a knižníc potrebná na fungovanie príslušného typu aplikácie, v našom prípade webovej aplikácie. Django je back-end čiže framework bežiaci na serveri. Využíva architektúru MVT (Model View Teplate). Jeho súčasťou je aj databázový engine SQL Lite. Tento framework využívajú známe aplikácie ako YouTube, Instagram, Spotify, Dropbox a mnohé ďalšie.
Architektúra Model View Template
Architektúra MVT (Model View Template) frameworku Django je navrhnutá tak, aby oddelila logiku aplikácie od jej prezentácie, čo uľahčuje správu a údržbu kódu. Každá časť hrá v rámci systému špecifickú úlohu:
Model môžeme chápať ako interface na prístup k údajom a prácu s nimi. Django má implementovanú funkcionalitu ORM (Object-Relational Mapping). ORM umožňuje pracovať s databázou prostredníctvom objektov Python bez toho, aby ste museli písať dopyty SQL priamo. To znamená, že môžete vytvárať, čítať, aktualizovať a mazať záznamy v databáze pomocou jednoduchého kódu Python. V praxi to znamená, že modely korešpondujú s databázovými tabuľkami.
View je používateľské rozhranie na prezentáciu údajov. V prípade frameworku Django má na starosti renderovanie webových stránok a spracovanie používateľských požiadaviek. View funguje ako sprostredkovateľ medzi modelmi a šablónami (templates). Na základe požiadaviek používateľa načítava údaje z modelov a odovzdáva ich šablónam na zobrazenie.
Template je súbor, ktorý definuje, ako budú údaje prezentované používateľom. V Django frameworku sú šablóny písané v jazyku HTML a môžu obsahovať aj CSS a JavaScript. Šablóny využívajú špeciálny jazyk šablón Django, ktorý umožňuje dynamické vkladanie údajov do kódu HTML. Šablóny umožňujú dynamické generovanie stránok na základe údajov poskytovaných z View. Architektúra MVT umožňuje jasné oddelenie jednotlivých komponentov aplikácie, čo prispieva k lepšej organizácii kódu a jeho ľahšej údržbe.
Inštalácia frameworku Django
Na cvičné príklady potrebujete mať nainštalovaný Python a editor kódu, napríklad Visual Studio Code. Ak máte Python nainštalovaný, spustí sa, ak nie, ponúkne inštaláciu z aplikačného obchodu.
Na inštaláciu použijete príkaz v konzolovej aplikácii typu Príkazový riadok (cmd), PowerShell, prípadne v terminálovom okne vývojového prostredia Visual Studio Code.
pip install django
Vytvorenie projektu
Vo virtuálnom prostredí vytvoríme projekt. Projekt môžeme chápať ako rodičovský objekt pre aplikácie, ktoré v ňom vytvoríme.
django-admin startproject NÁZOV_PROJEKTU
napríklad
django-admin startproject dja_projekt1
Vytvorenie aplikácie
Najskôr vysvetlíme, aký je rozdiel medzi projektom a aplikáciou. Aplikácia, v tomto prípade webová, niečo robí – napríklad blog, e-shop, publikačný systém... Projekt je zbierka konfigurácií a aplikácií pre konkrétnu webovú lokalitu. Projekt môže obsahovať viacero aplikácií a aplikácia môže byť vo viacerých projektoch.
Prepneme sa do adresára projektu
cd dja_projekt1
V rámci projektu vytvoríme aplikáciu, napríklad s názvom app1:
python manage.py startapp app1
Adresár s novou aplikáciou bol vytvorený, ale Django o nej zatiaľ nevie. Preto v adresári projektu otvoríme súbor settings.py. Do zoznamu aplikácií INSTALLED_APPS pridáme našu aplikáciu čiže app1:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1'
]
Po tejto úprave bude aplikácia zaradená do projektu.
Aby sme mohli pristupovať k webovej aplikácii cez prehliadač, potrebujeme webový server, ktorý je súčasťou frameworku Django. Spustíme ho príkazom:
python manage.py runserver
Aplikácia beží na našom lokálnom serveri implicitne na adrese http://localhost:8000/. Zadáme túto adresu do webového prehliadača. Zobrazí sa nám uvítacia stránka, ktorá potvrdí, že máte Django správne nainštalované a nakonfigurované.
Zobrazenie statických informácií
Potrebujeme dosiahnuť, aby sa po zadaní URL adresy zobrazil text, presnejšie povedané, aby sa spustila funkcia, ktorá zobrazuje text, alebo aby sa zobrazil obsah podľa šablóny, k čomu sa dostaneme neskôr. Najskôr si vytvoríme metódu, ktorá zobrazí nejaký text. Zobrazenie má na starosti modul View. V adresári aplikácie otvoríme súbor views.py. V ňom bude definícia používateľského rozhrania. V prvom príklade sa uspokojíme so zobrazením jednoduchého textu. Vytvoríme funkciu s názvom napríklad zobraz_text:
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def zobraz_text(request):
return HttpResponse("Zobrazený text 1")
Na túto metódu sa napojíme prostredníctvom súboru urls.py, ktorý bol vytvorený v adresári projektu. Do zoznamu urlpatterns doplníme cestu k tejto funkcii. Parameter name="index" zabezpečí, že sa toto napojenie aktivuje po zadaní základnej URL adresy, v tomto prípade http://localhost:8000.
from django.contrib import admin
from django.urls import path
from app1 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.zobraz_text, name="index"),
]
Teraz môžete urobiť refresh stránky.
Šablóny
Šablóna (template) je súbor s kódom HTML, ktorý definuje, ako budú údaje prezentované používateľom. Šablóny môžu obsahovať aj CSS a JavaScript. Využívajú špeciálny jazyk šablón Django, ktorý umožňuje dynamické vkladanie údajov do kódu HTML.
V súbore views.py vytvorte metódu zobraz_sablonu:
def zobraz_sablonu(request):
return render(request, "sablona.html")
Metódu pridáme do súboru urls.py v adresári aplikácie, pričom pôvodnú metódu dáme do komentára:
from django.urls import path
from . import views
urlpatterns = [
# path('', views.zobraz_text, name="index"),
path('help/', views.zobraz_napovedu, name="help"),
path('', views.zobraz_sablonu, name="index"),
]
V adresári aplikácie vytvorte adresár templates a súbor sablona1.html. Zatiaľ bude v šablóne HTML len nadpis:
Šablóna 1
Po zadaní URL adresy sa zobrazí stránka HTML, zo šablóny zatiaľ len nadpis bez údajov.
Na ukážku prepojenia modelu s údajmi si vytvoríme jednoduché statické údaje:
def zobraz_sablonu(request):
plemena_psov = [
{
"nazov": "Zlatý Retriever",
"povod": "Škótsko",
"velkost": "veľké",
},
{
"nazov": "Bígl",
"povod": "Anglicko",
"velkost": "stredné",
},
{
"nazov": "Čivava",
"povod": "Mexiko",
"velkost": "malé",
}
]
return render(request, "sablona.html", {"data1":plemena_psov})
Začneme vytvárať šablónu, v prvom kroku zobrazíme údaje v ich natívnej podobe:
{{data1}}
V prehliadači sa údaje zobrazia takto:
V dvojitých zložených zátvorkách {{ }} sú v šablónach Django názvy premenných, napríklad:
My first name is {{ first_name }}. My last name is {{ last_name }}.
{% %} sú tagy, do ktorých umiestňujeme príkazové bloky, napríklad cykly, podmienky a podobne. Napríklad:
{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}
Upravíme šablónu, aby sme údaje zobrazili v prehľadnejšej podobe.
Plemená psov
{% for plemeno in data1 %}
{{ plemeno.nazov }} ({{ plemeno.velkost }})
pôvod: {{ plemeno.povod|default:"neznámy" }}
{% endfor %}
V budúcom pokračovaní ukážeme zobrazenie dynamických údajov z databázy alebo vygenerovaných modelom AI.
Zobrazit Galériu