Professional Documents
Culture Documents
Gábor Szabó
2019
UNIVERZITA J. SELYEHO – SELYE JÁNOS EGYETEM
EKONOMICKÁ FAKULTA – GAZDASÁGTUDOMÁNYI KAR
Gábor Szabó
Komárno, 2019
Univerzita J. Selyeho
Ekonomická fakulta
The aim of this thesis is to introduce the Python programming language and its
frameworks, especially Django, with which we have created a simple web application. We
have chosen the web forum creation which is a useful and expanded web application. In the
first half of the work, we dealt with Python programming language and various popular
Python-based web frameworks and tried to present and characterize them. The practical part
contains a detailed description of the upcoming forum as well as the possibilities offered by
the Python programming language and the Django web framework. Our goal is to solve the
problem in a simple and transparent way to help future students. In order to achieve this goal,
we should help with the enclosed electronic guide (tutorial), which details the steps in
preparing the forum in the form of pictures and instructions.
APP – Application
OS – Operating System
UI – User Interface
11
1. A Python programozási nyelv és keretrendszerei
1.1. Python
Jellemzői:
12
1.2. Python alapú keretrendszerek összehasonlítása
1.2.1. Django
A Django egy nyílt forráskódú, magas szintű Python alapú keretrendszer, mely gyors
és egyszerű webfejlesztést tesz lehetővé. Néhány amerikai cég weboldalainak kiszolgálása
céljából hozták létre. A Django tehát egy Python programozási nyelven írt „eszköztár”,
amely segítségével weboldalakat készíthetünk Python nyelven – felhasználva a keretrendszer
által nyújtott eszközöket, szolgáltatásokat. Elsődleges célja, hogy megkönnyítse
bonyolultabb, adatbázis alapú weboldalak készítését.
Jellemzői:
13
1.2.2. Pyramid
Jellemzői:
URL generálás
Single-file aplikációk
Gyors
Bővíthető konfiguráció („add-on”-ok telepítése)
Mindenre kiterjedő sablon és eszköz specifikáció
Rugalmas hitelesítés és engedélyezés
Aktív tesztelés, support és átfogó adat dokumentáció
Funkció dekorátorok
1.2.3. TurboGears
A TurboGear egy nyílt forráskódú, adatvezérelt, magas szintű, Python alapú webes
keretrendszer. Adatvezérelt, bővíthető webalkalmazások gyors fejlesztését teszi lehetővé.
Rugalmas ORM-el és felhasználóbarát sablonokkal rendelkezik. A TurboGears-el gyorsan
és egyszerűen létrehozhatók adatbázist igénylő alkalmazások (SteelKiwi Inc., 2018).
14
Jellemzői:
1.2.4. Web2py
A Web2py egy skálázható, nyílt forráskódú, Python alapú webes keretrendszer, habár
a Python 3 programnyelvet nem támogatja. Dinamikus webtartalom létrehozását teszi
lehetővé a felhasználó számára. Saját web-alapú integrált fejlesztői környezete van, amely
többet között magába foglal egy kód szerkesztőt, debuggert és egy azonnali telepítőt. Ezek
lehetővé teszik a kódok fejlesztését és debuggolását, továbbá az alkalmazások tesztelését és
karbantartását (SteelKiwi Inc., 2018).
Jellemzői:
1.2.5. Flask
A Flask egy Python alapú webes keretrendszer. Nem nyílt forráskódú, a BSD
licenciója alatt áll. A Flask unicode-alapú és támogatja a Jinja2 sablon motort, ami az egyik
legnépszerűbb sablon a Python webalkalmazások számára. A Flask fő feladata, hogy segítsen
egy stabil webalkalmazás-alap létrehozásában. Ezután bármilyen bővítmény használható,
15
amire szükségünk van. A Flask egyszerű modellezése lehetővé teszi, hogy könnyen
alkalmazkodjon a fejlesztő igényeihez (SteelKiwi Inc., 2018; Guardia, 2016).
Jellemzői:
1.2.6. CherryPy
Jellemzői:
16
1.2.7. Tornado
Jellemzői:
1.2.8. CubicWeb
17
Jellemzői:
2. Felhasznált technológiák
2.1. HTML
A weblap egy egyszerű szöveges fájl amelyet, Hypertext Markup Language (HTML)
használatával kódolnak úgy, hogy az áttekinthetően, formázottan jelenjen meg a
webböngészőben.
A HTML jelentése:
A HTML fájl kódja címkék által körülvett szöveg. A címkék meghatározzák, hogy az
adott formázás hol legyen alkalmazva, a szöveg elrendezését, egy kép hol helyezkedjen
el, satöbbi. A formázott weboldal túl nagyméretű az interneten történő küldéshez, ezért a
webfejlesztők kifejlesztettek egy applikációt (a webböngészőt), amely formázási
utasításként értelmezi a szöveges kódot (HTML-címkéket).
18
A HTML-el hiperszöveg is létrehozható. Mikor a weboldal látogatója rákattint egy
hiperszövegre, a webböngésző betölti a hivatkozott oldalt, vagy egy megjelölt részre
ugrik az adott oldalon belül (Wempen, 2011).
2.2. CSS
A CSS (Cascading Style Sheets) egy egyszerű stílusleíró nyelv, amely célja a
weblapok megjelenítésének leegyszerűsítése.
A CSS felel a weboldal kinézetéért. Használatával megszabhatjuk a szöveg színét, a
betűk stílusát, a bekezdések közti teret, az oszlopok méretét és elhelyezkedését, milyen
háttérkép vagy szín kerül felhasználásra, és még sok más effektet.
A CSS könnyen tanulható nyelv, mégis nagy hatással van egy HTML dokumentum
megjelenésére. Önálló nyelvként nem használható, leggyakrabban a HTML dokumentummal
összefűzve kerül használatra (Tutorials Point (I) Pvt. Ltd., 2017).
Előnyei:
Időt spórol – Elég egyszer megírni, ugyanaz a lap több HTML oldalhoz is
felhasználható.
Gyors betöltés – A HTML-el ellentétben nem kell címke attribútumokat írni minden
alkalommal. Elég, ha definiálunk egy CSS szabályt egy címkére, és ezt minden
alaklommal felhasználjuk. A kevesebb kód gyorsabb töltési időt eredményez.
Könnyű karbantartás – Globális változáshoz elég módosítani a stílust, és az összes
weboldal összes eleme automatikusan frissül.
Kiváló HTML stílusok – Sokkal szélesebb körű attribútumokkal rendelkezik, mint
a HTML, így segítségével jobb kinézet érhető el
Több eszközzel kompatibilis
Globális webes szabványok
19
2.3. MySQL
A MySQL egy Oracle által támogatott nyílt forráskódú, SQL-alapú (Structured Query
Language) relációs adatbázis-kezelő rendszer. Gyakorlatilag minden platformon fut, köztük
Linuxon, Windowson és Unixon is. Bár számos alkalmazásban használható, a MySQL
leggyakrabban webes alkalmazásokhoz kapcsolódik.
A MySQL fontos része a LAMP (Linux-Apache-MySQL-PHP) összeállításnak. A
LAMP egy webfejlesztési platform, amely Linux operációs rendszeren fut, webszerverként
az Apache-ot, relációs adatbázis-kezelő rendszerként a MySQL-t, objektumorientált
szkriptnyelvként pedig a PHP-t használja. Néha a PHP-t a Perl vagy a Python helyettesíti.
A MySQL a kliens-szerver modellen alapszik. A MySQL magja a MySQL szerver,
amely az utasításokat és a parancsokat kezeli. A parancsok a MySQL kliensen keresztül
érkeznek.
A MySQL eredetileg nagyméretű adatbázisok gyors kezelésére lett kifejlesztve.
Általában csak egy eszközre van feltelepítve. Így is képes az adatbázist több helyre eljuttatni,
mivel a felhasználók könnyen elérhetik különböző MySQL klienseken keresztül (Rouse,
2018).
2.4. Notepad++
2.5. Anaconda
20
A legnagyobb különbség a Conda és a pip (a Python alapértelmezett csomagkezelője)
csomagkezelő között a csomagfüggőségek kezelése, amely jelentős kihívást jelent a Python
adattudomány számára. Ez az oka a Conda kifejlesztésének. A pip az összes szükséges
Python csomagfüggőséget telepíti, függetlenül attól, hogy azok ütköznek-e más, korábban
telepített programokkal. Ez a csomagok nem megfelelő működéséhez vagy leállásához
vezethet. A Conda elemzi az éppen aktuális környezetet, minden telepített csomagot, a
megadott verziókorlátozásokat, és kiszámolja, hogyan telepítheti a kompatibilis
függőségeket vagy jelzi, hogy a kívánt művelet nem végrehajtható. A pip ezzel ellentétben
mindent feltelepít, amit a felhasználó kíván, még akkor is, ha az bizonyos csomagok
leállásához vezet (Anaconda (Python distribution), 2019; Reitz-Schlusser, 2016).
21
3.1.2. Django project
3.1.2.1. Manage.py
3.1.2.2. Settings.py
3.1.2.3. Urls.py
22
3.1.2.4. Wsgi.py
A WSGI (Web Server Gateway Interface) a webszerver átjáró interfésze, amely leírja,
hogy egy webszerver hogyan kommunikál a webalkalmazásokkal, és hogyan lehet a
webalkalmazásokat összekapcsolni egy kérés feldolgozására.
A Django elsődleges telepítési platformja a WSGI, egy Python szabvány
webszerverek és alkalmazások számára.
3.1.3. Applikációk
3.1.3.1. Admin.py
3.1.3.2. Apps.py
23
3.1.3.3. Forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'description',)
24
3.1.3.4. Models.py
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
description = models.TextField()
published_date = models.DateTimeField(default=timezone.now)
updated = models.DateTimeField(blank=True, null=True)
views = models.IntegerField(default=0)
25
Az updated és a views nem került használatra a webfórum elkészítése során. Az
egyszerűbb testreszabhatóság kedvéért maradt az adatbázisban.
3.1.3.5. Tests.py
3.1.3.6. Views.py
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'home/post_edit.html', {'form': form})
A views.py fájlban megadott def post_new alatt a post_new view funkció lett
definiálva:
„if request.method == "POST"” – a feltétel megszabja, hogy ha a lekérési metódus
POST, az űrlap paramétereit a PostForm-ból kérje le („form = PostForm“), amelyet már
korábban megírtunk a forms.py fájlban.
26
„if form.is_valid” – a feltétel egy logikai értéket ad vissza, amely az adott űrlap
mezőinek tartalmától függ. Ha akár egy is üres a kapott érték hamis. A feltétel csak akkor
teljesül, ha az űrlap minden input mezőjében szerepel adat, mely esetben a következő
műveletek történnek:
„post = form.save” – a parancs segítségével az űrlap mezőibe beírt adatok
mentésre kerülnek az adattáblában.
„post.author = request.user” – a parancs lekéri a szerző nevét az adattábla
user oszlopából.
„post.published_date = timezone.now” – a parancs lekéri a publikáció idejét,
amely a settings.py fájlban megadott időzóna alapján, az aktuális dátumod és időt adja
eredményül.
„post.save” – a parancs segítségével mentjük a poszt adatait.
„return redirect” – a műveletek végrehajtása után, ez a parancs adja meg,
hogy a webalkalmazás milyen URL-re vagy sablonra térjen vissza.
„else” – ha az adott metódus nem POST, hanem GET, egy üres űrlapot kapunk, amely
a paramétereit a PostForm-tól („form = PostForm”) és a „return render” által
meghatározott sablontól kapja.
3.1.3.7. Sablonok
A sablon (template) egy egyszerű szöveges fájl, amely bármilyen szöveg-alapú leíró
nyelv kódját tartalmazhatja (HTML CSV, XML stb.). A sablon fájlok változókat (amelyek
az adattáblából kapnak értéket a meghatározott útvonal alapján), továbbá címkéket
tartalmaznak. A címkékkel különböző változtatásokat végezhetünk az adott oldal kinézetén,
mint például az oldal neve, cím, gombok beszúrása, betűméret és stílus, különböző ikonok
és CSS fájl csatolása.
27
3.2.1. Migrációk
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'forum',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'root',
'PASSWORD': 'Password',
}}
28
A modellek átvitelét a python manage.py migrate paranccsal hajtjuk végre. Az így
kapott adatbázis modellje:
29
4. A készített webfórum bemutatása
4.1.2. Menü
30
A saját profil opció egy sablonhoz vezet, amely a felhasználó személyes adatait és
egy profil szerkesztése hivatkozást tartalmaz. A legtöbb mező alapértelmezetten üres, hisz a
felhasználó még nem adta meg ezeket az adatokat. A profil szerkesztése hivatkozás egy
űrlapra irányítja a webböngészőt, ahol a felhasználó megadhatja adatait a megfelelő
mezőben.
A poszt létrehozása opcióval a webböngésző egy űrlapot jelenít meg, amelyben a
felhasználó megadja a poszt címét és leírását. Ha mindkét mezőt feltöltötte adattal, a mentés
gomb segítségével a poszt feltöltésre kerül az adatbázisban és megjelenik a poszt lista
oldalon. A témát létrehozó felhasználónak később lehetősége van ezeken az adatokon
változtatni.
A kijelentkezés opcióval a felhasználó kijelentkezhet a webfórumból.
4.2. Hibák
A webfórum kód írása közben különböző hibák léptek fel. A legtöbb problémát az
URL-ek megfelelő beállítása okozta, amelyek nélkül a webböngésző nem találta az oldal
megjelenítéséhez szükséges fájlt és beállításokat. Továbbá a modellek szerkezete és a view
bonyolult funkciói jelentettek nagyobb kihívást.
A legnagyobb problémát a webfórum és az adatbázis összekapcsolása jelentette. Több
alkalommal kaptunk hibaüzeneteket hiányzó modulokról, amelyek telepítése ellenére a
probléma nem szűnt meg. Továbbá különböző csatlakozási hibaüzenetek kaptunk, például,
hogy a MySQL szerver nem elérhető, a jelszó nem egyezik a megadott root jelszóval vagy
annak titkosítási módja nem megfelelő.
31
4.3. Az elkészült webfórum kinézete
32
Befejezés
33
Resumé
34
Tretia kapitola popisuje, aké súbory webové fórum obsahuje, ich účel a aké príkazy
sú potrebné na vykonávanie rôznych operácií. Predstavuje aplikácie, aplikácie a vytváranie
databáz v rámci webového fóra.
Nakoniec štvrtá kapitola predstavuje prvky dokončeného webového fóra a chyby,
ktoré sa vyskytli počas jeho tvorby. V rámci práce predstavujeme priebeh registrácie
a prihlásenia a ako sa toto spája s dátovým súborom; možnosti, ktoré má používateľ k
dispozícii, ako napríklad úprava osobných údajov a komunikácia vo webovom fóre. Okrem
toho popisujeme chyby, ktoré sa vyskytli počas tvorby a napokon prezentujeme vzhľad
webového fóra.
Dokončené webové fórum sa skladá z rôznych funkcií a prvkov. Ak užívateľ nie je
prihlásený, domovská stránka webového fóra ponúka prihlásenie alebo registráciu.
Neregistrovaný užívateľ sa musí zaregistrovať, aby si databáza uložila svoje užívateľské
meno a heslo na prihlásenie neskôr. Registračné rozhranie obsahuje tri polia formulára:
potvrdenie používateľského mena, hesla a potvrdenie hesla. Toto sme vykonali pomocou
základným registračným rozhraním Django. Ak užívateľ vyplní všetky polia správne a
vstupné údaje spĺňajú všetky kritériá, údaje používateľa sú uložené v databáze. Ak užívateľ
vyplní všetky polia správne a vstupné údaje spĺňajú všetky kritériá, údaje používateľa sú
uložené v databáze. V tomto prípade je už možné prihlásiť sa do webového fóra.
Kliknutím na prihlasovaciu možnosť, užívateľ uvidí dve polia formulára, do ktorých
má byť zadané jeho užívateľské meno a heslo. Heslá sú uložené v databáze šifrované. Keď
sa vyplnia všetky polia a zadané údaje sa zhodujú s údajmi uloženými v databáze, užívateľ
môže vstúpiť do webového fóra.
Používateľ má v ponuke k dispozícii rôzne možnosti. Každá možnosť je odkaz, ktorý
smeruje webový prehliadač na túto adresu URL. Vo webovom fóre sú k dispozícii
nasledujúce možnosti: zoznam postov, vlastný profil, vytvorenie postu a odhlásenie.
Zoznam postov je zobrazený ako domovská stránka webového fóra, na ktorom sú
uvedené témy, ktoré používatelia otvorili. Kliknutím na názov postu umožníte používateľovi
prístup k téme. Tu získate možnosť pridať odpoveď a kliknutím na webový prehliadač
zobraziť formulár. Na tejto stránke je pole, kde môže užívateľ poskytnúť odpoveď. Keď je
pole vyplnené, tlačidlo odoslania sa používa na uloženie údajov do databázy.
35
Výber možnosti vlastného profilu vedie k šablóne, ktorá obsahuje osobné údaje
používateľa a úpravu odkazu. Väčšina polí je štandardne prázdna, pretože používateľ tieto
údaje ešte nezadal. Odkaz Upraviť profil nasmeruje webový prehliadač na formulár, do
ktorého môže používateľ zadať svoje údaje do príslušného poľa. Možnosť Vytvoriť post
umožňuje webovému prehliadaču zobraziť formulár, v ktorom používateľ zadá názov postu
a popis. Ak sa obe polia vyplnili údajmi, pomocou tlačidla Uložiť sa post nahrá do databázy
a objaví sa na stránke zoznam postov. Používateľ, ktorý vytvoril post, môže neskôr tieto
údaje zmeniť.
Pomocou možnosti odhlásenia sa užívateľ môže odhlásiť z webového fóra.
Pri písaní kódu webového fóra sa vyskytli rôzne chyby. Najviac problémov
spôsobovalo nastavenie správnych URL adries, bez ktorých prehliadač nemohol nájsť
potrebné súbory a nastavenia pre zobrazenie stránky. Ďalej boli pre nás výzvou štruktúry
modelov a komplikované funkcie view –u. Najväčším problémom bolo prepojenie webového
fóra a databázy. Niekoľkokrát sme dostali chybové hlásenia o chýbajúcich moduloch, ktoré
napriek inštalácii problém nevyriešili. Okrem toho sme dostali rôzne chybové hlásenia o
pripojení, napríklad, že server MySQL nie je k dispozícii, heslo nezodpovedá zadanému
heslu užívateľa root, alebo metóda šifrovania je nesprávna.
Inspiráciou pre napísanie bakalárskej práce bolo naučiť sa používať programovací
jazyk Python. Vzhladom na to, že som počas môjho vysokoškolského štúdia nemal možnosť
oboznámiť sa s týmto programovacím jazykom, preto som využil túto príležitosť pri písaní
svojej bakalárskej práce.
Počas práce sme úspešne vytvorili webové fórum, ktoré spĺňa základné požiadavky
úlohy a ciele, ktoré sme si stanovili. Naším hlavným cieľom bolo vytvoriť jednoduchú,
základnú aplikáciu, ktorá by sa dala ľahko rozšíriť a použiť, ako aj pomôcť poslucháčom,
ktorí chcú spoznať možnosti frameworku Django a vytvoriť tak webové fórum. Tento ciel
sme dosiahli taktiež pomocou elektronickej pomôcky, ktorá sa nachádza v prílohe.
36
Felhasznált irodalom
GUARDIA, Carlos. Python Web Frameworks. Sebastopol: O’Reilly Media, Inc., 2016.
ISBN 978-1-491-93810-2
SteelKiwi Inc. Top 10 Python Web Frameworks to Learn in 2018 [online]. 2018.
https://hackernoon.com/top-10-python-web-frameworks-to-learn-in-2018-b2ebab969d1a
[megtekintés dátuma: 2019.02.15.]
WEMPEN, Faithe. HTML5 Step by Step. Sebastopol: O’Reilly Media, Inc., 2011. ISBN
978-0-735-64526-4
37
What is Python? [online]. 2019. https://www.python.org/doc/essays/blurb/ [megtekintés
dátuma: 2019.05.14.]
38
Mellékletek
A CD melléklet tartalma
A szakdolgozat PDF formátumban
Az elektronikus segédanyag PDF formátumban
Forráskódok
39
A webfórum online elérhetősége:
http://ujsforums.pythonanywhere.com/
40