Flask
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 24.04 Noble Numbat
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Flask 🇬🇧 ist eine in und für Python geschriebene Bibliothek (Python-Modul) zum Erstellen von WSGI-basierten 🇬🇧 (Web Server Gateway Interface) Webanwendungen. Flask bezeichnet sich selber als "lightweight" (auf deutsch: leichtgewichtig) und zählt auch zu den "Microframeworks". Es ist in der Tat mit Flask möglich, mit wenigen Zeilen Python-Code eine (einfach) Webanwendung zu schreiben. Flask ermöglicht es aber ebenfalls, komplexere / größere Anwendungen zu schreiben und es gibt eine Vielzahl von Erweiterungen 🇬🇧.
Flask nutzt Jinja2 🇬🇧 als Template-Engine und Werkzeug 🇬🇧 für das Routing. Flask stammt ursprünglich vom gleichen Entwickler, der auch Teile des Codes der ersten Versionen von Inyoka, der Softwareplattform von ubuntuusers.de, beigesteuert hat.
Installation¶
aus den Paketquellen¶
Flask ist in den Ubuntu Paketquellen enthalten und kann über das Paket
python3-flask
Befehl zum Installieren der Pakete:
sudo apt-get install python3-flask
Oder mit apturl installieren, Link: apt://python3-flask
installiert werden. Allerdings ist die Version nicht die aktuelle, stabile Version, so dass eine Installation über pip gegebenenfalls vorzuziehen ist.
via pip¶
Die aktuelle, stabile Version von Flask kann mit Hilfe von pip in einem venv installiert werden[2]:
pip3 install flask
Wer Flask unter Ubuntu 23.04 und neuer außerhalb eines venv installieren möchte, muss pip mit der entsprechenden Option aufrufen.
Nutzung¶
Flask bzw. dessen Funktionen und Methoden lassen sich in Python über den Aufruf von
1 | from flask import Flask |
importieren.
Routing - ein einfaches Beispiel¶
Das folgende Beispielprogramm zeigt kurz die Möglichkeiten von statischen und dynamischen Routen in Flask. Dazu gibt man den Code einfach in einen Editor ein[2] und speichert diesen zum Beispiel als webanwendung.py ab.
1 2 3 4 5 6 7 8 9 10 11 12 13 | from flask import Flask from markupsafe import escape app = Flask(__name__) @app.route("/statisch") def statisch(): return "<p>Ich bin eine statische Route</p>" @app.route("/dynamisch/<name>") def dynamisch(name): return f"<p>Hallo {escape(name)}, wie geht es dir?</p>" |
Gestartet wird die Anwendung, indem man in Terminal in dem Verzeichnis, wo sich die Datei befindet, den Befehl
flask --app webanwendung run
ausführt. Die Anwendung läuft dann auf dem Entwicklungsserver von Flask unter http://127.0.0.1:5000
.
Das Prinzip ist also wie folgt: Mit Hilfe des @app.route()
Dekorators wird die angegebene Route an die folgende Funktion gebunden. Die Funktion wiederum kann beliebigen Python-Code enthalten, welcher letztendlich mit return
zurückgegeben bzw. vom Browser dargestellt wird.
Routen sind dabei letztendlich die URLs, welche man aufrufen kann. Im obigen Beispiel wären dies z.B. http://127.0.0.1:5000/statisch
und http://127.0.0.1:5000/dynamisch/Otto
.
Beim Entwickeln einer Anwendung kann es nützlich sein, dem Aufruf zusätzlich die Option --debug
mit anzugeben. Im Fehlerfall erscheint dann eine detaillierte Ausgabe des Debuggers 🇬🇧 von Flask.
Templates benutzen¶
Wie in der Einleitung erwähnt bringt Flask die Jinja2 Template Engine mit, mit deren Hilfe sich Templates (auf deutsch: Vorlagen) für z.B. HTML Seiten erstellen lassen. Flask erwartet in der Standardeinstellung, dass die Templates im Verzeichnis templates liegen, das Verzeichnis ist im selben Verzeichnis wie die Python-Datei, die das Template einbindet.
Ein einfaches Template sieht z.B. so aus, zu speichern unter dem Namen rechnen.html:
1 2 3 4 5 6 7 8 9 10 11 12 | <!doctype html> <title>Templatedemo</title> <h1>Vervielfachen</h1> <p>Die eingegebene Zahl ist {{ zahl }}.</p> {% if zahl % 2 == 0 %} <p>Die Zahl ist gerade.</p> {% else %} <p>Die Zahl ist ungerade.</p> {% endif %} {% for faktor in (2, 4, 6) %} <p>Das {{ faktor }}-fache davon ist {{ zahl * faktor }}.</p> {% endfor %} |
Das Template erwartet, dass eine Variable namens zahl
an das Template übergeben ist. Die Zahl wird dann als erstes ausgegeben, dann geprüft, ob sie gerade oder ungerade ist und zuletzt wird noch das 2, 4 und 6-fache der Zahl ausgegeben.
Die Anwendung sieht so aus, zu speichern unter dem Namen rechendemo.py
1 2 3 4 5 6 7 8 | from flask import Flask, render_template app = Flask(__name__) @app.route('/rechnen/<int:zahl>') def rechnen(zahl): return render_template('rechnen.html', zahl=zahl) |
Es gibt eine dynamische Route, die einen Integerwert erwartet. Dieser wird an die Funktion rechnen
übergeben, diese übergibt die Zahl wiederum als Variable zahl
an das Template rechnen.html
.
Führt man nun den Befehl
flask --app rechendemo run
aus und ruft im Browser die URL http://127.0.0.1/rechnen/4
auf, erhält man die Ausgabe entsprechend des Templates.
Anbindung an andere Server¶
Produktiv sollte Flask nie über den eingebauten Entwicklungsserver, sondern über WSGI-Applikationsserver wie gunicorn oder waitress betrieben werden. Hinweise dazu findet man in der Deployment Doku 🇬🇧 von Flask.
weitere Funktionen¶
Flask besitzt natürlich einen deutlich größeren Funktionsumfang als hier gezeigt. Einen vollständigen Überblick erhält man in der sehr ausführlichen Dokumentation 🇬🇧 von Flask.
Links¶
intern¶
extern¶
Dokumentation 🇬🇧 von Flask, sehr ausführlich mit vielen Beispielen
Tutorial 🇬🇧 zum Erstellen einer umfangreicheren Webapplikation mit Flask
Github Seite von Flask
Dokumentation 🇬🇧 zur Jinja2 Template Engine
Quart 🇬🇧 - asynchrones Webframework, die API ist so gut wie identisch zu Flask
Flask Megatutorial 🇬🇧 - Startseite eines sehr umfangreichen Tutorials zu Flask