Um das Repository zu klonen, verwenden Sie den entsprechenden Befehl und navigieren anschließend im Terminal bzw. der Kommandozeile zum geklonten Verzeichnis. Starten Sie die Docker-Services mit folgendem Befehl:
docker compose up -dHinweis: Die Applikation wird im Hintergrund gestartet, sodass sie nicht direkt in der Konsole ausgeführt wird. Möchten Sie die Applikation jedoch in der Konsole starten, lassen Sie den -d-Schalter weg und führen Sie den folgenden Befehl aus: docker compose up.
Um die Applikation wieder zu beenden, verwenden Sie den folgenden Befehl:
docker compose downWenn die Applikation ohne den -d-Schalter ausgeführt wurde, können Sie sie durch Drücken von CTRL + C auf Windows/Linux oder CMD + C auf macOS beenden.
Falls die Applikation ohne Docker-Unterstützung gestartet werden soll, führen Sie die folgenden Schritte in der Kommandozeile aus. Stellen Sie sicher, dass Sie sich im Ordner des geklonten Repositorys befinden. Es wird vorausgesetzt, dass Sie Python Version 3 sowie virtualenv auf Ihrem System installiert haben.
-
Erstellen Sie ein virtuelles Python-Environment:
virtualenv venv
-
Aktivieren Sie das virtuelle Environment:
- Für die Kommandozeile:
.\venv\Scripts\activate.bat
- Für PowerShell:
.\venv\Scripts\activate.ps1
- Für die Kommandozeile:
-
Installieren Sie die notwendigen Abhängigkeiten:
pip3 install -r requirements.txt
-
Initialisieren Sie die Datenbank:
flask db init
-
Erstellen Sie die Migrationen:
flask db migrate -m "Initialize database" -
Wenden Sie die Migrationen an:
flask db upgrade
-
Setzen Sie die Umgebungsvariable für die Flask-Applikation:
set FLASK_APP=zeitverwaltung.py -
Starten Sie die Flask-Applikation:
flask run
Nach der Ausführung dieser Befehle sollte die Applikation lokal verfügbar sein und über den Webbrowser zugänglich gemacht werden.
Um die Applikation zu starten, führen Sie die folgenden Schritte im Terminal aus. Stellen Sie sicher, dass Sie sich im Ordner des geklonten Repositorys befinden. Es wird vorausgesetzt, dass Python Version 3 und virtualenv bereits auf Ihrem System installiert sind.
-
Erstellen Sie ein virtuelles Python-Environment:
virtualenv venv
-
Aktivieren Sie das virtuelle Environment:
source ./venv/bin/activate -
Installieren Sie die benötigten Abhängigkeiten:
pip3 install -r requirements.txt
-
Initialisieren Sie die Datenbank:
flask db init
-
Erstellen Sie die Migrationen:
flask db migrate -m "Initialize database" -
Wenden Sie die Migrationen an:
flask db upgrade
-
Setzen Sie die Umgebungsvariable für die Flask-Applikation:
export FLASK_APP=zeitverwaltung.py -
Starten Sie die Flask-Applikation:
flask run
Nach der Ausführung dieser Befehle sollte die Applikation lokal laufen und im Webbrowser zugänglich sein.
Dieses Repository enthält eine Webapplikation, die mit dem Python-basierten Flask-Framework entwickelt wurde und eine Anbindung an die relationale Datenbank MariaDB integriert. Die Applikation wurde vollständig von mir entwickelt, wobei einige Komponenten, insbesondere die Struktur der Verzeichnisse sowie der Registrierungs- und Login-Mechanismus, aus dem Microblog von Miguel Grinberg übernommen wurden. Diese Vorlagen dienten als Ausgangspunkt und wurden entsprechend den spezifischen Anforderungen der Applikation weiter modifiziert und optimiert.
Time Management ist eine benutzerfreundliche Webapplikation, die es den Nutzern ermöglicht, ihre geleisteten Arbeitsstunden präzise zu erfassen und zu verwalten. Nach der erfolgreichen Registrierung und dem Login haben die Nutzer ausschließlich Zugriff auf ihre eigenen Daten, was eine hohe Datensicherheit und Privatsphäre gewährleistet.
Die Applikation ermöglicht es den Nutzern, für jeden Arbeitstag einen Zeiteintrag zu erstellen, in dem die geleisteten Stunden dokumentiert werden. Zusätzlich besteht die Möglichkeit, für jeden Eintrag einen optionalen Kommentar hinzuzufügen, um etwaige spezifische Details zu vermerken. Die erfassten Stunden können jederzeit eingesehen, bearbeitet oder – falls erforderlich – gelöscht werden.
In der Profilübersicht werden nicht nur die persönlichen Daten des Nutzers angezeigt, sondern auch die insgesamt geleisteten Arbeitsstunden. Weiterhin haben die Nutzer die Möglichkeit, ihren aktuellen Stand in Bezug auf Über- oder Minusstunden (Flextime) zu überprüfen, um ihre Arbeitszeit flexibel und effizient zu verwalten.
Bestimmte Teile der Applikation wurden entweder inspiriert oder direkt aus dem MicroBlog von Miguel Grinberg übernommen. Diese Komponenten, insbesondere die Struktur der Verzeichnisse sowie der Registrierungs- und Login-Mechanismus, dienten als Grundlage und wurden an die spezifischen Anforderungen der eigenen Webapplikation angepasst.
Für die Entwicklung der Webanwendung wurden die folgenden Technologien und Bibliotheken verwendet:
- Programmiersprache: Python – Die Hauptsprache für die Backend-Entwicklung.
- Web-Framework: Flask – Ein leichtgewichtiges Web-Framework, das für die schnelle Entwicklung von Webanwendungen optimiert ist.
- Datenbanksystem: MariaDB – Eine relationale Open-Source-Datenbank, die für die Verwaltung der Benutzer- und Arbeitsstundendaten verantwortlich ist.
- Containerisierung: Docker und docker-compose – Ermöglicht die Erstellung, Bereitstellung und Verwaltung von Containern zur Isolierung und Skalierung der Anwendung.
- Rendering der Webseiten: Jinja2 – Ein Templating-Engine, die für die dynamische Generierung von HTML-Seiten verwendet wird.
- Styling-Bibliothek: Bootstrap – Ein Framework für die Entwicklung responsiver und ansprechender Benutzeroberflächen.
- Benutzte Icons: FontAwesome – Eine Icon-Bibliothek, die in der Anwendung für die visuelle Darstellung von Funktionen und Aktionen genutzt wird.
Die Webapplikation ist für eine geraume Zeit öffentlich im Internet erreichbar unter der URL http://136.244.87.119:5000/.
Der komplette Code befindet sich öffentlich zugänglich auf GitHub unter folgendem Repository: https://github.com/FuatHacilar/DBWE
Die WebAPI stellt eine Schnittstelle zur Verfügung, über die HTTP-Anfragen an den Webserver gesendet werden können, um verschiedene Datenoperationen durchzuführen. Die Webapplikation bietet derzeit API-Endpunkte für die folgenden Szenarien:
- Erstellen und Bearbeiten von Nutzerdaten
- Erstellen und Löschen von Authentifizierungstokens
- Abrufen aller erfassten Arbeitsstunden
- Erstellen, Bearbeiten, Abrufen und Löschen von erfassten Arbeitsstunden
Diese APIs sind unter den folgenden Pfaden erreichbar:
/api/users– für Operationen im Zusammenhang mit Nutzerdaten/api/working-hours– für das Verwalten von Arbeitsstunden/api/tokens– für die Verwaltung von Authentifizierungstokens
Base-Auth: <USERNAME>:<PASSWORD>
Die Authentifizierungsdaten werden in der URL mitgegeben. Beispielsweise:
https://<USERNAME>:<PASSWORD>http://136.244.87.119:5000/api/tokens
Pfad: /api/tokens
Methode: POST
Dieses Beispiel als curl Kommando:
curl http://TestUser:TestPasswort@136.244.87.119:5000/api/tokens -X POSTPfad: /api/tokens
Methode: DELETE
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/tokens -X DELETE -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT"Pfad: /api/users
Methode: POST
Content-Type im Header: Content-Type: application/json
Body als JSON:
{
"username": "TestUser",
"email": "test@test.com",
"password": "TestPassword",
"company": "TEST",
"job": "TEST",
"target_time": 24
}Ersetzen Sie die Beispielwerte im JSON mit Ihren eigenen.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/users -X POST -H "Content-Type: application/json" -d "{\"username\": \"TestUser\", \"email\": \"test@test.com\", \"password\": \"TestPassword\", \"company\": \"TEST\", \"job\": \"TEST\", \"target_time\": 24}"Pfad: /api/users
Methode: GET
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/users -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT"Pfad: /api/users
Methode: PUT
Content-Type im Header: Content-Type: application/json
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Body als JSON:
{
"username": "TestUser",
"email": "test@test.com",
"password": "TestPassword",
"company": "TEST",
"job": "TEST",
"target_time": 24
}Ersetzen Sie die Beispielwerte im JSON mit Ihren eigenen. Es müssen nicht alle Werte mitgegeben werden, nur jene, welche geändert werden sollen.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/users -X PUT -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT" -H "Content-Type: application/json" -d "{\"company\":\"TEST\", \"job\":\"TEST\"}"Pfad: /api/working-hours
Methode: POST
Content-Type im Header: Content-Type: application/json
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Body als JSON:
{
"date": "2024-09-02",
"working_hours": 8.4,
"comment": "Time Management Flask Applikation"
}Ersetzen Sie die Beispielwerte im JSON mit Ihren eigenen. Beachten Sie, dass das Datum im Format YYYY-MM-DD mitgegeben werden muss.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/working-hours -X POST -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT" -H "Content-Type: application/json" -d "{\"date\":\"2024-09-02\",\"working_hours\":\"8.4\",\"comment\":\"Time Management Flask Applikation\"}"Pfad: /api/working-hours
Methode: GET
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/working-hours -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT"Pfad: /api/working-hours/<ID>
Hier
<ID>durch die ID der erfassten Arbeitsstunden ersetzen. Diese ID kann man herausfinden, indem man alle Einträge der Arbeitsstunden lädt und die ID ausliest.
Methode: GET
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/working-hours/1 -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT"Pfad: /api/working-hours/<ID>
Hier
<ID>durch die ID der erfassten Arbeitsstunden ersetzen. Diese ID kann man herausfinden, indem man alle Einträge der Arbeitsstunden lädt und die ID ausliest.
Methode: PUT
Content-Type im Header: Content-Type: application/json
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Body als JSON:
{
"working_hours": 9,
"comment": "Time Management Dokumentation"
}Ersetzen Sie die Beispielwerte im JSON mit Ihren eigenen. Es kann nur der Kommentar bzw. die geleistete Arbeitsstunden bearbeitet werden.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/working-hours/1 -X PUT -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT" -H "Content-Type: application/json" -d "{\"working_hours\":9,\"comment\":\"Time Management Dokumentation\"}"Pfad: /api/working-hours/<ID>
Hier
<ID>durch die ID der erfassten Arbeitsstunden ersetzen. Diese ID kann man herausfinden, indem man alle Einträge der Arbeitsstunden lädt und die ID ausliest.
Methode: DELETE
Authorization im Header: Authorization: Bearer <TOKEN>
Ersetzen Sie
<TOKEN>durch Ihren eigenen Token.
Dieses Beispiel als curl Kommando:
curl http://136.244.87.119:5000/api/working-hours/1 -X DELETE -H "Authorization: Bearer 1ZTtkbEocxOMPd4VdN1n7dBwZXtmoCRT"