Flask ist ein besonders schlankes Webframework, das für Anfängerinnen und Anfänger sowie Profis gleichermaßen interessant ist. Flask beschränkt sich auf das Wesentliche und erlaubt die Implementierung externer Bibliotheken.

Python und seine Webframeworks

Python ist eine der beliebtesten Internet-Programmiersprachen der Welt. Das liegt vor allem am Ansatz, möglichst einfachen und kurzen Code zu verwenden. Der Programmierstil wird dadurch sehr viel übersichtlicher, Fehlerquellen werden minimiert und auch die Lernerfolge bei einem Python-Tutorial stellen sich schnell ein. Die 1991 von Guido van Rossum erfundene Sprache wird heute von einer großen Community unter der Aufsicht der gemeinnützigen Python Software Foundation weiterentwickelt. Sie ist Open Source und plattformunabhängig. Als dynamische Sprache unterstützt Python u. a. objektorientierte und funktionale Programmierung sowie Logging und kann als CGI-Script ausgeführt werden.

Für die Erstellung und Entwicklung von dynamischen Websites und anderen Webanwendungen werden auch für Python verschiedene Webframeworks angeboten. Diese erleichtern die Arbeit, da sie Code zur Verfügung stellen und wiederholende Tätigkeiten merklich vereinfachen. Fehler oder Python-Probleme können so vermieden werden und die Webservices laufen sicherer und schneller. Häufig benötigte Funktionen können direkt übernommen werden und erfordern daher keine eigenständige Programmierung. Zu den bekanntesten Webframeworks für Python gehört Django, das als Full-Stack-Lösung im Vergleich Flask vs. Django einen großen Werkzeugkoffer unterschiedlicher Funktionen zur Verfügung stellt, dafür aber auch vergleichsweise festgelegt und starr ist. Der vielleicht bekannteste Gegenentwurf dazu ist Flask.

Was ist Flask?

Während Full-Stack-Frameworks wie Django Entwicklerinnen und Entwicklern zahlreiche eigene Bibliotheken zur Verfügung stellen, verfolgt Flask Python einen anderen Ansatz. Das Webframework, das der österreichische Entwickler Armin Ronacher 2010 erstmals der Öffentlichkeit vorstellte, ist ausdrücklich minimalistisch gehalten und verzichtet auf jeglichen Ballast. Einzig die Template-Engine Jinja und eine Bibliothek namens „Werkzeug“ sind enthalten. Auf Funktionen, die bereits von anderen Bibliotheken abgedeckt werden, verzichtet Flask völlig. Stattdessen gibt es die Möglichkeit, all diese Funktionen zu integrieren. Flask steht unter BSD-Lizenz, ist frei und Open Source. Als Gegenentwurf zu Django und anderen Frameworks konnte Flask Python innerhalb kürzester Zeit eine große Fangemeinde begeistern.

Profi-Website in Sekunden dank KI.
  • Modernste Vorlagen, KI-generiert
  • Integrierte Marketingtools für Ihren Online-Erfolg
  • 24/7 Premium-Support und persönlicher Berater inklusive

Flask in Python einrichten und eine Webanwendung erstellen

Bevor Sie Flask für Python einrichten können, müssen ein paar Voraussetzungen erfüllt sein. Dazu gehört, dass Sie Python 3 installiert haben. Sie benötigen außerdem einen Texteditor oder eine IDE und Zugang zum Internet. Außerdem ist es hilfreich, wenn Sie bereits Grundkenntnisse im Bereich Python, Programmierung, Datentypen und for-Schleifen haben. Flask ist ein guter Ausgangspunkt, um die Erstellung von Webanwendungen zu lernen. Das Framework richten Sie folgendermaßen ein:

  1. Erstellen Sie eine virtuelle Umgebung, um das neue Projekt von Ihren restlichen Python Libraries oder Projekten zu trennen. Ansonsten kann dies zu Problemen mit Ihrem System führen. Der passende Code sieht so aus:
$ python -m venv neuesprojekt
  1. Nun installieren Sie Flask. Dafür nutzen Sie am besten das Paketverwaltungsprogramm pip. Der passende Befehl lautet:
$ pip install flask
  1. Um zu überprüfen, ob die Installation erfolgreich war, nutzen Sie diesen Befehl:
python -c "import flask; print(flask.__version__)"
  1. Nun können Sie Flask testen und eine einfache Basisanwendung erstellen. Öffnen Sie dazu in Ihrem Verzeichnis eine Datei. In unserem Beispiel nennen wir sie anfang.py und nutzen nano, um sie aufzurufen:
$ nano anfang.py
  1. In diese Datei schreiben Sie nun folgenden Code:
from flask import Flask
app = Flask(__name__)
@app.route ( "/" )
def test ( ):
return "Dies ist ein Test"
  1. Speichern und schließen Sie die Datei.

  2. Mit der Umgebungsvariable FLASK_APP zeigen Sie Flask, wo sich die entsprechende Datei befindet:

$ export FLASK_APP=anfang
  1. Über FLASK_ENV führen Sie die Datei im Entwicklungsmodus aus:
$ export FLASK_ENV=development
  1. Nun führen Sie die Anwendung aus:
$ flask run

Der Output sieht dann in etwa so aus:

Output
- Serving Flask app "anfang" (lazy loading)
- Environment: development
- Debug mode: on
- Running on [IP-Adresse]/ (Press CTRL+C to quit)
- Restarting with stat
- Debugger is active!
- Debugger PIN [PIN]

Vor- und Nachteile von Flask

Es gibt gute Gründe für die Nutzung von Flask. Ein paar Aspekte sprechen allerdings je nach gewünschtem Einsatzzweck auch dagegen. Aus diesem Grund lohnt ein genauer Blick auf die Vor- und Nachteile des Webframeworks.

Vorteile

Umfang: Ein schlankeres Framework als Flask Python werden Sie kaum finden. Flask kann sehr schnell installiert und dann direkt genutzt werden.

Flexibilität: Auch die Flexibilität, die Flask mit sich bringt, ist herausragend. Sie haben die Möglichkeit, jedes Problem individuell zu lösen und können genau jene Bibliotheken implementieren, die Sie auch wirklich benötigen. So können Sie jedes Projekt individuell angehen.

Lernkurve: Lernerfolge stellen sich bei einem Flask-Tutorial sehr schnell ein. Das Framework ist bewusst einfach aufgebaut, erlaubt Ihnen aber auch die Arbeit an anspruchsvollen Projekten. Flask ist daher eine gute Wahl für Einsteigerinnen und Einsteiger sowie Profis, die an komplexeren Projekten arbeiten.

Open Source: Flask ist frei und Open Source. Daher können Sie das Framework ausprobieren und sehen, ob es die richtige Wahl für Ihre Zwecke ist.

Community: Flask hat eine riesige Fangemeinde, die Neulingen und erfahreneren Entwicklerinnen bzw. Entwicklern gerne mit Rat und Tat zur Seite steht. So werden auch Fragen und Probleme schnell beantwortet und gelöst.

Nachteile

Umfang: Je nach Einsatzzweck kann der minimalistische Umfang auch ein Nachteil sein. Es muss alles zusätzlich implementiert werden, während andere Frameworks deutlich mehr Funktionen anbieten.

Abhängigkeit von Drittanbietern: Die Verwendung externer Bibliotheken ist immer auch eine mögliche Problemquelle, diese sind bei Flask aber unabdingbar.

Verantwortung: Während andere Frameworks die Wartung automatisch durchführen und mögliche Probleme direkt beheben, liegt diese Verantwortung bei Flask bei den Nutzerinnen und Nutzern selbst. Das bedeutet einerseits mehr Kontrolle, bereitet andererseits aber auch mehr Arbeit.

Hello-World-Beispiel: Routing, Templates und APIs

Um die grundlegende Funktionsweise von Flask besser kennenzulernen, folgt nun ein kleines Beispiel, das die wichtigsten Grundkonzepte des Webframeworks veranschaulicht. Wir erstellen dafür eine einfache Webanwendung, die zeigt, wie Routing, Templates und eine REST-API zusammen funktionieren. Das Beispiel besteht aus zwei Dateien:

  • app.py: Hier befindet sich unser Pythoncode.
  • templates/hello.html: Diese Datei ist ein Jinja2-Template, um die Website dynamisch anzuzeigen.

Die Datei app.py sieht folgendermaßen aus:

from flask import Flask, jsonify, render_template, request
app = Flask(__name__)
@app.route("/")
def home():
    return "Hello World!"
@app.route("/greet/<name>")
def greet(name):
    return render_template("hello.html", name=name)
@app.route("/api/square", methods=["GET"])
def square():
    number = request.args.get("number", default=0, type=int)
    result = number ** 2
    return jsonify({"number": number, "square": result})
if __name__ == "__main__":
    app.run(debug=True)
python

Dies ist die Datei hello.html, die als Template fungiert:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Greeting</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
<p>Welcome to Flask with Jinja2 template.</p>
</body>
</html>
html

Mit @app.route definieren wir verschiedene Endpunkte. Dies sind URLs, die der Server beantworten kann. Die Startseite (“/”) zeigt lediglich den Text „Hello World!“. Über einen dynamischen Pfad (“/greet/<name>”) können wir eine persönliche Begrüßung anzeigen. Der Name wird dabei aus der URL übernommen und an unser Jinja2-Template übergeben, das ihn in HTML einfügt (siehe den Code aus templates/hello.html).

Zusätzlich demonstrieren wir, wie man eine kleine REST-API erstellt: Unter dem Endpunkt “/api/square” kann der User eine Zahl als URL-Parameter übergeben und die App gibt das Quadrat der Zahl als JSON-Antwort zurück. Wir sehen also, dass Flask sowohl klassische Websites als auch API-Endpunkte bedienen kann. Auch dynamische Inhalte lassen sich dank Templates einfach in HTML einbinden, ohne die Seite manuell anzupassen.

Hinweis

Natürlich handelt es sich bei diesem Code nur um ein Minimalbeispiel im Rahmen eines Flask-Tutorials. Es soll vor allem die grundlegenden Konzepte verdeutlichen. In einer echten Anwendung müssten zusätzlich Aspekte wie Fehlerbehandlung, Sicherheit, Datenvalidierung und eine saubere Projektstruktur berücksichtigt werden, damit die App stabil, zuverlässig und wartbar bleibt.

Flask-Erweiterungen

Da Flask sehr minimalistisch gehalten ist, sind viele nützliche Features wie Datenbankanbindung, Authentifizierung oder Formularvalidierung nicht integriert. Um diese Funktionen hinzuzufügen, setzt man auf Flask-Erweiterungen, die von der Community entwickelt und gepflegt werden. Sie lassen sich einfach in eine Flask-Anwendung integrieren und erweitern den Funktionsumfang erheblich, ohne dass man das Framework selbst anpassen muss. So können Entwicklerinnen und Entwickler gezielt die Bausteine auswählen, die sie wirklich benötigen, und ihre App modular aufbauen. Erweiterungen folgen in der Regel dem gleichen Muster wie Flask selbst und sind gut dokumentiert.

Beispiele für wichtige Flask-Erweiterungen sind:

  • Flask-SQLAlchemy: Eine Erweiterung für die Datenbankanbindung. Sie integriert das beliebte SQLAlchemy ORM in Flask und ermöglicht einfaches Arbeiten mit Datenbanken über Python-Klassen.
  • Flask-WTF: Diese Extensions unterstützt die Erstellung und Validierung von Webformularen. Sie bietet Sicherheitsfeatures wie CSRF-Schutz und erleichtert das Handling von Benutzereingaben.
  • Flask-Login: Wie der Name schon sagt widmet sich Flask-Login vereinfachter Benutzerverwaltung und Authentifizierung. Die Erweiterung kümmert sich um Login-Status, Sitzungen und Zugriffsschutz für bestimmte Routen.
  • Flask-Migrate: Mit Flask-Migrate erhalten Sie Datenbank-Migrationsfunktionen, die Änderungen an der Datenbankstruktur automatisch verwalten. Die Verwendung ist ideal in Kombination mit Flask-SQLAlchemy für strukturierte Updates.
  • Flask-RESTful: Diese Extension dient der vereinfachten Erstellung von REST-APIs. Sie stellt Ressourcen, Routen und HTTP-Methoden wie GET, POST, PUT oder DELETE standardisiert bereit.

Projektstruktur und Best-Practices

Bei Flask-Projekten ist es empfehlenswert, von Anfang an eine klare und strukturierte Projektorganisation zu wählen. Auch wenn kleine Apps technisch in einer einzigen Datei funktionieren, erleichtert eine saubere Struktur die Wartung und Erweiterung der Anwendung erheblich.

Typischerweise legt man für größere Projekte Verzeichnisse wie templates für HTML-Dateien, static für CSS, JavaScript und Bilder, sowie app oder src für Python-Module an. Innerhalb des App-Ordners können Unterordner für Blueprints, Models, Forms und Utilities entstehen, um Funktionen logisch zu trennen. Blueprints ermöglichen es, verschiedene Komponenten der App modular zu gestalten, beispielsweise eine Benutzerverwaltung oder einen Blog.

Best Practices empfehlen außerdem, Konfigurationswerte, wie Datenbank-URLs oder geheime Schlüssel, in einer separaten config.py oder über Umgebungsvariablen zu sichern. Kontinuierliches Logging hilft, Fehler frühzeitig zu erkennen und das Verhalten der App nachzuvollziehen. Ebenfalls sinnvoll ist der Einsatz von virtuellen Umgebungen, um Abhängigkeiten sauber zu verwalten. Auch Versionskontrolle mit Git gehört zu den Standardpraktiken, um Änderungen nachvollziehbar zu machen.

Website mit eigener Domain – MyWebsite Now
Erstellen Sie Ihre eigene Website in wenigen Minuten
  • Professionelle Templates
  • Änderungen am Design mit nur einem Klick
  • Domain, SSL und E-Mail-Postfach inklusive

Flask: Sicherheit und Tests

Sicherheit und Tests sind keine optionalen Extras, sondern zentrale Bestandteile einer professionellen Flask-Anwendung, weshalb sie in keinem Flask-Tutorial vernachlässigt werden sollten. Wer von Anfang an auf Verschlüsselung, Input-Validierung, sichere Konfigurationen und automatisierte Tests achtet, entwickelt stabile und sichere Webanwendungen, die sich später problemlos erweitern lassen.

Sicherheit in Flask

Aufgrund der minimalistischen Struktur von Flask liegt die Verantwortung für die Sicherheit der Anwendung bei den Entwicklerinnen und Entwicklern. Ein grundlegender Schutz besteht in der Verwendung von CSRF-Schutz für Formulare, insbesondere bei Benutzereingaben. Hierfür bietet die Erweiterung Flask-WTF bewährte Mechanismen.

Passwörter sollten niemals im Klartext gespeichert werden, sondern immer verschlüsselt oder gehasht. Hierfür eignen sich beispielsweise die Bibliotheken werkzeug.security oder bcrypt. Ebenso wichtig ist die Input-Validierung, um SQL-Injections, XSS-Angriffe oder andere Manipulationen zu verhindern.

Bei Sessions und Cookies sollten die Flags HttpOnly und Secure gesetzt werden, um sensible Daten zu schützen. Konfigurationen wie Datenbank-URLs oder API-Schlüssel sollten über Umgebungsvariablen oder separate Config-Dateien verwaltet werden, statt direkt im Code.

Tests in Flask

Wie in jeder programmierten Anwendung sind auch in Flasks Tests entscheidend, um die Stabilität der Anwendung sicherzustellen. Mit sogenannten Unit-Tests werden einzelne Funktionen isoliert geprüft, während Integrationstests das Zusammenspiel mehrerer Komponenten testen.

Flask bietet dafür ein eingebautes Test-Client-System, mit dem HTTP-Anfragen simuliert werden können, ohne den Server tatsächlich zu starten. So lassen sich Routen, Templates und API-Endpunkte automatisiert prüfen. Besonders wichtig ist es, regelmäßig Testfälle zu schreiben, gerade bei neuen Features, um Regressionen zu vermeiden. In Kombination mit Continuous Integration sorgt dies dafür, dass die App auch bei Änderungen zuverlässig bleibt.

War dieser Artikel hilfreich?
Zum Hauptmenü