diff --git a/Herunterladen.bat b/Herunterladen.bat new file mode 100644 index 0000000..ddd19e0 --- /dev/null +++ b/Herunterladen.bat @@ -0,0 +1,11 @@ +@echo off +echo ---------------------------------------------------------------I +echo Herunterladen des aktuellen Repositories I +echo ---------------------------------------------------------------I +git pull +echo ---------------------------------------------------------------I +echo Herunterladen beendet I +echo ---------------------------------------------------------------I +echo. +echo. +pause \ No newline at end of file diff --git a/Hochladen.bat b/Hochladen.bat new file mode 100644 index 0000000..35a3b2f --- /dev/null +++ b/Hochladen.bat @@ -0,0 +1,42 @@ +@echo off +echo ---------------------------------------------------------------I +echo Herunterladen des aktuellen Repositories I +echo ---------------------------------------------------------------I +git pull +echo ---------------------------------------------------------------I +echo Herunterladen beendet I +echo ---------------------------------------------------------------I +echo. +echo. +echo ---------------------------------------------------------------I +echo Einlesen der aktualisierten Dateien I +echo ---------------------------------------------------------------I +git add . +echo ---------------------------------------------------------------I +echo Einlesen beendet I +echo ---------------------------------------------------------------I +echo. +echo. +echo ---------------------------------------------------------------I +echo Eingabe der Bezeichnung des Commits +set /p eingabe=Wie soll der Commit heissen?: +echo ---------------------------------------------------------------I +echo. +echo. +echo ---------------------------------------------------------------I +echo Commit I +echo ---------------------------------------------------------------I +git commit -m "%eingabe%" +echo ---------------------------------------------------------------I +echo Commit beendet I +echo ---------------------------------------------------------------I +echo. +echo. +echo ---------------------------------------------------------------I +echo Hochladen der Veraenderungen I +echo ---------------------------------------------------------------I +git push +echo ---------------------------------------------------------------I +echo Hochladen beendet I +echo ---------------------------------------------------------------I +pause \ No newline at end of file diff --git a/Praktikum1/Aufgabe A.pdf b/Praktikum1/Aufgabe A.pdf new file mode 100644 index 0000000..7c55e94 Binary files /dev/null and b/Praktikum1/Aufgabe A.pdf differ diff --git a/Praktikum1/webteams/app/__init__.py b/Praktikum1/webteams/app/__init__.py new file mode 100644 index 0000000..1546642 --- /dev/null +++ b/Praktikum1/webteams/app/__init__.py @@ -0,0 +1 @@ +# kennzeichnet ein Verzeichnis als Python-Package \ No newline at end of file diff --git a/Praktikum1/webteams/app/application.py b/Praktikum1/webteams/app/application.py new file mode 100644 index 0000000..4d036c9 --- /dev/null +++ b/Praktikum1/webteams/app/application.py @@ -0,0 +1,109 @@ +# coding: utf-8 + +import cherrypy +from .database import Database_cl +from .view import View_cl + +#---------------------------------------------------------- +class Application_cl(object): +#---------------------------------------------------------- + + #------------------------------------------------------- + def __init__(self): + #------------------------------------------------------- + # spezielle Initialisierung können hier eingetragen werden + self.db_o = Database_cl() + self.view_o = View_cl() + @cherrypy.expose + + + #------------------------------------------------------- + def index(self): + #------------------------------------------------------- + return self.createList_p() + @cherrypy.expose + + + #------------------------------------------------------- + def add(self): + #------------------------------------------------------- + return self.createForm_p() + @cherrypy.expose + + + #------------------------------------------------------- + def edit(self, id): + #------------------------------------------------------- + return self.createForm_p(id) + @cherrypy.expose + + + #------------------------------------------------------- + def save(self, **data_opl): + #------------------------------------------------------- + # Sichern der Daten: aufgrund der Formularbearbeitung muss + # eine vollständige HTML-Seite zurückgeliefert werden! + # data_opl: Dictionary mit den gelieferten key-value-Paaren + # hier müsste man prüfen, ob die Daten korrekt vorliegen! + # HIER müssen Sie die Semesterzahl(en) ergänzen + id_s = data_opl["id_s"] + data_a = [ data_opl["name1_s"] + , data_opl["vorname1_s"] + , data_opl["matrnr1_s"] + , data_opl["name2_s"] + , data_opl["vorname2_s"] + , data_opl["matrnr2_s"] + ] + + if id_s != "None": + # Update-Operation + self.db_o.update_px(id_s, data_a) + else: + # Create-Operation + id_s = self.db_o.create_px(data_a) + + return self.createForm_p(id_s) + @cherrypy.expose + + + #------------------------------------------------------- + def delete(self, id): + #------------------------------------------------------- + # Eintrag löschen, dann Liste neu anzeigen + self.db_o.delete_px(id) return self.createList_p() + @cherrypy.expose + + + #------------------------------------------------------- + def default(self, *arguments, **kwargs): + #------------------------------------------------------- + msg_s = "unbekannte Anforderung: " + \ + str(arguments) + \ + ''+ \ + str(kwargs) + raise cherrypy.HTTPError(404, msg_s) + default.exposed= True + + + #------------------------------------------------------- + def createList_p(self): + #------------------------------------------------------- + data_o = self.db_o.read_px() + # mit diesen Daten Markup erzeugen + + return self.view_o.createList_px(data_o) + + + #------------------------------------------------------- + def createForm_p(self, id_spl = None): + #------------------------------------------------------- + if id_spl != None: + data_o = self.db_o.read_px(id_spl) + else: + data_o = self.db_o.getDefault_px() + + # mit diesen Daten Markup erzeugen + return self.view_o.createForm_px(id_spl, data_o) + + +# EOF \ No newline at end of file diff --git a/Praktikum1/webteams/app/database.py b/Praktikum1/webteams/app/database.py new file mode 100644 index 0000000..de58a0a --- /dev/null +++ b/Praktikum1/webteams/app/database.py @@ -0,0 +1,116 @@ +# coding: utf-8 + +import os +import os.path +import codecs +import json + +#---------------------------------------------------------- +class Database_cl(object): +#---------------------------------------------------------- + # da es hier nur darum geht, die Daten dauerhaft zu speichern, + # wird ein sehr einfacher Ansatz verwendet: + # - es können Daten zu genau 15 Teams gespeichert werden + # - je Team werden 2 Teilnehmer mit Namen, Vornamen und Matrikelnummer + # berücksichtigt + # - die Daten werden als eine JSON-Datei abgelegt + + + #------------------------------------------------------- + def __init__(self): + #------------------------------------------------------- + self.data_o = None + self.readData_p() + + + #------------------------------------------------------- + def create_px(self, data_opl): + #------------------------------------------------------- + # Überprüfung der Daten müsste ergänzt werden! + # 'freien' Platz suchen, + # falls vorhanden: belegen und Nummer des Platzes als Id zurückgeben + + id_s = None + for loop_i in range(0,15): + if self.data_o[str(loop_i)][0] == '': + id_s = str(loop_i) + self.data_o[id_s] = data_opl + self.saveData_p() + break + + return id_s + + + #------------------------------------------------------- + def read_px(self, id_spl = None): + #------------------------------------------------------- + # hier zur Vereinfachung: + # Aufruf ohne id: alle Einträge liefern + + data_o = None + if id_spl == None: + data_o = self.data_o + else: + if id_spl in self.data_o: + data_o = self.data_o[id_spl] + + return data_o + + + #------------------------------------------------------- + def update_px(self, id_spl, data_opl): + #------------------------------------------------------- + # Überprüfung der Daten müsste ergänzt werden! + status_b = False + if id_spl in self.data_o: + self.data_o[id_spl] = data_opl + self.saveData_p() + status_b = True + + return status_b + + + #------------------------------------------------------- + def delete_px(self, id_spl): + #------------------------------------------------------- + status_b = False + if id_spl in self.data_o: + pass + # hier müssen Sie den Code ergänzen + # Löschen als Zurücksetzen auf die Default-Werte implementieren + # Ihre Ergänzung + + return status_b + + + #------------------------------------------------------- + def getDefault_px(self): + #------------------------------------------------------- + return ['', '', '', '', '', ''] # HIER müssen Sie eine Ergänzung vornehmen + + + #------------------------------------------------------- + def readData_p(self): + #------------------------------------------------------- + try: + fp_o = codecs.open(os.path.join('data', 'webteams.json'), 'r', 'utf-8') + except: + # Datei neu anlegen self.data_o = {} + for loop_i in range(0,15): + self.data_o[str(loop_i)] = ['', '', '', '', '', ''] # HIER müssen Sie eine Ergänzung vornehmen + self.saveData_p() + else: + with fp_o: + self.data_o = json.load(fp_o) + + return + + + #------------------------------------------------------- + def saveData_p(self): + #------------------------------------------------------- + with codecs.open(os.path.join('data', 'webteams.json'), 'w', 'utf-8') as fp_o: + json.dump(self.data_o, fp_o) + + +# EOF \ No newline at end of file diff --git a/Praktikum1/webteams/app/view.py b/Praktikum1/webteams/app/view.py new file mode 100644 index 0000000..b166006 --- /dev/null +++ b/Praktikum1/webteams/app/view.py @@ -0,0 +1,83 @@ +# coding: utf-8 + +# sehr einfache Erzeugung des Markups für vollständige Seiten +# jeweils 3 Abschnitte: +# - begin +# - content +# - end + +# bei der Liste wird der content-Abschnitt wiederholt +# beim Formular nicht + +import codecs +import os.path +import string + +#---------------------------------------------------------- +class View_cl(object): +#---------------------------------------------------------- + + #------------------------------------------------------- + def __init__(self): + #------------------------------------------------------- + pass + + + #------------------------------------------------------- + def createList_px(self, data_opl): + #------------------------------------------------------- + # hier müsste noch eine Fehlerbehandlung ergänzt werden ! + markup_s = '' + markup_s += self.readFile_p('list0.tpl') + markupV_s = self.readFile_p('list1.tpl') + lineT_o = string.Template(markupV_s) + + # mehrfach nutzen, um die einzelnen Zeilen der Tabelle zu erzeugen + for loop_i in range(0,15): + data_a = data_opl[str(loop_i)] + markup_s += lineT_o.safe_substitute (name1_s=data_a[0] # HIER müssen Sie eine Ergänzung vornehmen + , vorname1_s=data_a[1] + , matrnr1_s=data_a[2] + , name2_s=data_a[3] + , vorname2_s=data_a[4] + , matrnr2_s=data_a[5] + , id_s=str(loop_i) + ) + + markup_s += self.readFile_p('list2.tpl') + + return markup_s + + + #------------------------------------------------------- + def createForm_px(self, id_spl, data_opl): + #------------------------------------------------------- + # hier müsste noch eine Fehlerbehandlung ergänzt werden ! + markup_s = '' + markup_s += self.readFile_p('form0.tpl') + markupV_s = self.readFile_p('form1.tpl') + lineT_o = string.Template(markupV_s) + markup_s += lineT_o.safe_substitute (name1_s=data_opl[0] # HIER müssen Sie eine Ergänzung vornehmen + , vorname1_s=data_opl[1] + , matrnr1_s=data_opl[2] + , name2_s=data_opl[3] + , vorname2_s=data_opl[4] + , matrnr2_s=data_opl[5] + , id_s=id_spl + ) + markup_s += self.readFile_p('form2.tpl') + + return markup_s + + + #------------------------------------------------------- + def readFile_p(self, fileName_spl): + #------------------------------------------------------- + content_s = '' + with codecs.open(os.path.join('template', fileName_spl), 'r', 'utf-8') as fp_o: + content_s = fp_o.read() + + return content_s + + +# EOF \ No newline at end of file diff --git a/Praktikum1/webteams/content/webteams.js b/Praktikum1/webteams/content/webteams.js new file mode 100644 index 0000000..e0a29d8 --- /dev/null +++ b/Praktikum1/webteams/content/webteams.js @@ -0,0 +1,11 @@ +function confirmDelete_p (event_opl) { + if ((event_opl.target.tagName.toLowerCase() == 'a') && (event_opl.target.className == "clDelete")) { + // Klick auf Link zum Löschen + // Ihre Ergänzung + } +} + +window.onload = function () { + let body_o = document.getElementsByTagName('body')[0]; + body_o.addEventListener('click', confirmDelete_p, false); +} \ No newline at end of file diff --git a/Praktikum1/webteams/server.py b/Praktikum1/webteams/server.py new file mode 100644 index 0000000..5e30a8a --- /dev/null +++ b/Praktikum1/webteams/server.py @@ -0,0 +1,45 @@ +#coding: utf-8 + +import os +import cherrypy +from app import application + +#-------------------------------------- +def main(): +#-------------------------------------- + + # Get current directory + try: + current_dir = os.path.dirname(os.path.abspath(__file__)) + except: + current_dir = os.path.dirname(os.path.abspath(sys.executable)) + + # disable autoreload and timeout_monitor + cherrypy.engine.autoreload.unsubscribe() + cherrypy.engine.timeout_monitor.unsubscribe() + + # Static content config + static_config = { + '/': { + 'tools.staticdir.root': current_dir, + 'tools.staticdir.on': True, + 'tools.staticdir.dir': './content' + } + } + + # Mount static content handler + root_o = cherrypy.tree.mount(application.Application_cl(), '/', static_config) + + # suppress traceback-info + cherrypy.config.update({'request.show_tracebacks': False}) + + # Start server + cherrypy.engine.start() + cherrypy.engine.block() + +#-------------------------------------- +if __name__ == '__main__': +#-------------------------------------- + main() + +# EOF \ No newline at end of file diff --git a/Praktikum1/webteams/template/form0.tpl b/Praktikum1/webteams/template/form0.tpl new file mode 100644 index 0000000..9d9a2c3 --- /dev/null +++ b/Praktikum1/webteams/template/form0.tpl @@ -0,0 +1,12 @@ + + + + Web-Teams + + + + + +
\ No newline at end of file diff --git a/Praktikum1/webteams/template/form1.tpl b/Praktikum1/webteams/template/form1.tpl new file mode 100644 index 0000000..272bdd1 --- /dev/null +++ b/Praktikum1/webteams/template/form1.tpl @@ -0,0 +1,14 @@ + +
+ + +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/Praktikum1/webteams/template/form2.tpl b/Praktikum1/webteams/template/form2.tpl new file mode 100644 index 0000000..8c836cd --- /dev/null +++ b/Praktikum1/webteams/template/form2.tpl @@ -0,0 +1,6 @@ +
+ +
+
+ + \ No newline at end of file diff --git a/Praktikum1/webteams/template/list0.tpl b/Praktikum1/webteams/template/list0.tpl new file mode 100644 index 0000000..33cdf10 --- /dev/null +++ b/Praktikum1/webteams/template/list0.tpl @@ -0,0 +1,17 @@ + + + + Web-Teams + + + + + + + + + + + \ No newline at end of file diff --git a/Praktikum1/webteams/template/list1.tpl b/Praktikum1/webteams/template/list1.tpl new file mode 100644 index 0000000..2ad319a --- /dev/null +++ b/Praktikum1/webteams/template/list1.tpl @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Praktikum1/webteams/template/list2.tpl b/Praktikum1/webteams/template/list2.tpl new file mode 100644 index 0000000..5d3af45 --- /dev/null +++ b/Praktikum1/webteams/template/list2.tpl @@ -0,0 +1,6 @@ +
Name (1)Vorname (1)Matr.-Nr. (1)Name (2)Vorname (2)Matr.-Nr. (2)Aktion
$name1_s$vorname1_s$matrnr1_s$name2_s$vorname2_s$matrnr2_sbearbeiten löschen
+
+ erfassen +
+ + \ No newline at end of file diff --git a/Praktikum1/webteams/template/listaufz0.tpl b/Praktikum1/webteams/template/listaufz0.tpl new file mode 100644 index 0000000..2e1089f --- /dev/null +++ b/Praktikum1/webteams/template/listaufz0.tpl @@ -0,0 +1,12 @@ + + + + Web-Teams + + + + + + +
+ erfassen +
+ + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a384ad2 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# WEB + + +---------- +### Tutorial: Einfach +#### Einrichtung +1. Git + - Herunterladen von [Git](https://git-scm.com/download/win) + - Git installieren (Kontextmenüeinträge auch installieren) +2. GitConfig + - Herunterladen der [GitConfig.bat](http://kai.truenoobs.de/GitConfig.bat) + - GitConfig.bat ausführen +3. Repository herunterladen + - In das Verzeichnis navigieren, wo das Repository herunterladen werden soll + - Rechtsklick in den Ordner --> ``Git Bash here`` + - ``git clone https://git.truenoobs.de/Hochschule/WEB.git`` eingeben und mit Enter bestätigen +4. Updates herunterladen + - im VSY-Verzeichnis ``Herunterladen.bat`` ausführen +5. Updates hochladen + - im VSY-Verzeichnis ``Hochladen.bat`` ausführen + + +### Tutorial: Fortgeschritten +#### Projekt in den Client "klonen" + 1. Wunschordner im Explorer öffnen (bsp: ``C://Users/$username/Documents/GitLab/``) + 2. Rechtsklick in Ordner -> "Git Bash" + 3. ``git clone https://git.truenoobs.de/$username/$projektname`` + 4. (``cd $projektname`` eingeben und mit Enter bestätigen) + + +#### Veränderungen runterladen + 1. Wunschordner im Explorer öffnen (bsp: ``C://Users/$username/Documents/GitLab/$projektname``) + 2. Rechtsklick in Ordner -> "Git Bash" + 3. ``git pull`` + + +#### Veränderungen hochladen + 1. Wunschordner im Explorer öffnen (bsp: ``C://Users/$username/Documents/GitLab/$projektname``) + 2. Rechtsklick in Ordner -> "Git Bash" + 3. ``git add .`` (Änderungen erkennen) + 4. ``git commit -m "$beschreibung_der_Veränderung"`` (Änderungen bestätigen) + 5. ``git push`` (Änderungen hochladen) + +#### Hinweis +- Möglichst regelmäßig ``git pull`` ausführen, speziell, wenn man anfängt, an dem Projekt weiter zu arbeiten! Passiert das nicht, kann sich der Inhalt des Repositories ändern, sodass die lokalen Daten nicht mehr aktuell sind. \ No newline at end of file