# Flask Server (PaAn) Die Anwendung wurde in der Programmiersprache Python mit dem Framework **Flask** entwickelt. Während der Entwicklung der Anwendung, wurde der Entwicklungsserver verwendet, um diese Anwendung zu testen. Aber als die Entwicklung fertig war, wurde auf den Produktionsserver umgestellt. Ein Server sollte die Grundfunktionalität von einem HTTP-Server haben. ```{figure} ../img/backend/webserver.png :alt: webserver :name: webserver Python Webserver ``` Die {numref}`webserver` zeigt, dass der Python Webserver in der Lage sein sollte, http-Anfragen vom Client zu behandeln (z.B.: GET, PUT und POST Anfrage) und eine Antwort zurückzugeben. Die Antwort enthält den http Zustandscode, in dem steht, ob die Anfrage erfolgreich bearbeitet wurde oder nicht. Die http-Antwort (HTTP Response) besteht aus der HTML Webseite und strukturierten Daten wie Bsp. JSON, XML. Ein üblicher Server ist nicht instande, die verwiesene Anfrage an die Python Anwendung zu verstehen und zu verarbeiten. An dieser Stelle spielt jetzt der server **gateway interfaces** (siehe [Abbildung zum Gateway](#gateway)) eine wichtige Rolle. Der Webserver Gateway Interface bearbeitet die Anfrage sequenziell. Der Webserver bekommt die Anfrage vom Client, der es dann an dem server gateway interface weiterleitet. Die Schnittstelle (WSGI) interagiert dann mit der Python Anwendung durch einen freigelegten Callable. Es gibt verschiedene Webserver Gateway Interface, aber wir haben uns entschieden den **GunicornWSGI** wegen diesen folgenden Eigenschaften: - Einfach und schnell - Kompatibel mit vielen Web Frameworks - Fortgeschrittene Prozess Verwaltung ```{figure} ../img/backend/gateway.png :alt: gateway :name: gateway Server Gateway Interface ``` ## Paket Installation Der Gunicorn WSGI kann mit dem folgenden Python Paketmanager pip Befehl installiert werden: ```bash pip install gunicorn ``` ## Start des Servers Der Server kann mit dem folgenden Befehl gestartet werden: ```bash gunicorn -w 4 -b '127.0.0.1:8000' 'edu_linux_server.bin.daemon.get_flask_app()' ``` Die Option **-w** spezifiziert die Anzahl der auszuführenden Prozesse. ## Server Klasse Für den Server wurde eine Klasse **Webserver** (siehe [Abbildung zur Webserver Klasse](#webserver_class)) geschrieben, die von der Klasse Flask ableitet. Für die Funktion `static_files(String)` wird ein Endpunkt für die Startseite und deren CSS und Javascript Zugriff verwendet. Die Funktion `onboarding_static_files(String)` greift auf die CSS und Javascript Dateien des Onboarding-Screens zu. Die Funktion `onboarding_home_page()` zeigt die Onboarding-screen Webseite. ```{figure} ../img/backend/webserver_class.jpg :alt: webserver_class :name: webserver_class EduxOS Webserver Klasse ```