Flask ist ein leichtgewichtiges Web-Framework für Python, das nach dem Prinzip “Micro-Framework” entwickelt wurde. Im Gegensatz zu größeren Frameworks wie Django verzichtet Flask auf viele vorgefertigte Komponenten und bietet stattdessen eine minimale Grundausstattung, die flexibel erweitert werden kann.
Flask basiert auf dem WSGI-Toolkit Werkzeug und der Template-Engine Jinja2. Diese Komponenten bilden das Fundament für die Entwicklung von Webanwendungen. Der modulare Aufbau ermöglicht es Entwicklern, nur die benötigten Funktionalitäten zu integrieren und die Anwendung nach spezifischen Anforderungen zu gestalten.
Das Framework eignet sich besonders für kleine bis mittelgroße Anwendungen und Prototyping. Durch seine Einfachheit und die ausführliche Dokumentation ist Flask sowohl für Einsteiger als auch für erfahrene Entwickler gut geeignet.
Flask folgt mehreren grundlegenden Designprinzipien, die seine Verwendung und Erweiterung bestimmen:
Flask stellt nur die essentiellen Funktionen für die Webentwicklung zur Verfügung. Dazu gehören Routing, Request-Handling, Template-Rendering und Response-Generierung. Zusätzliche Funktionalitäten wie Datenbankabstraktion, Formularvalidierung oder Authentifizierung werden über Extensions hinzugefügt.
Das Framework macht keine Vorgaben zur Projektstruktur oder zu verwendeten Bibliotheken. Entwickler können ihre Anwendungen nach eigenen Vorstellungen organisieren und passende Tools auswählen.
Flask bevorzugt explizite Konfiguration gegenüber impliziten Konventionen. Dadurch wird der Code verständlicher und nachvollziehbarer, erfordert aber mehr initiale Konfigurationsarbeit.
Flask-Anwendungen sind vollständig WSGI-kompatibel und können mit verschiedenen Webservern betrieben werden. Dies ermöglicht flexible Deployment-Strategien und Integration in bestehende Infrastrukturen.
Eine typische Flask-Anwendung besteht aus folgenden Hauptkomponenten:
Application Object: Das zentrale Flask-Objekt, das die Anwendung repräsentiert und Konfiguration sowie Routing verwaltet.
Request Context: Verwaltet anwendungsspezifische Daten während der Bearbeitung einer HTTP-Anfrage.
Application Context: Stellt anwendungsweite Ressourcen zur Verfügung, die unabhängig von spezifischen Requests existieren.
Blueprints: Ermöglichen die modulare Organisation von Anwendungscode durch gruppierte Routes und Funktionalitäten.
Für die Flask-Entwicklung wird Python 3.8 oder höher empfohlen. Das System sollte pip für die Paketverwaltung zur Verfügung haben. In Windows-Umgebungen ist die Installation über den Microsoft Store oder die offizielle Python-Website möglich.
Die Verwendung virtueller Umgebungen ist für Flask-Projekte obligatorisch. Sie isolieren Projektabhängigkeiten und verhindern Konflikte zwischen verschiedenen Anwendungen.
python -m venv flask_projekt
flask_projekt\Scripts\activate # Windows
source flask_projekt/bin/activate # Linux/MacNach der Aktivierung der virtuellen Umgebung kann Flask über pip installiert werden:
pip install FlaskFür Produktionsumgebungen sollte zusätzlich ein WSGI-Server installiert werden:
pip install gunicorn # Linux/Mac
pip install waitress # Windows-AlternativeEine grundlegende Flask-Projektstruktur könnte folgendermaßen aussehen:
projekt/
├── app.py
├── config.py
├── requirements.txt
├── static/
│ ├── css/
│ ├── js/
│ └── images/
├── templates/
└── instance/
└── config.py
Die requirements.txt-Datei dokumentiert alle Projektabhängigkeiten:
Flask==2.3.3
Flask-SQLAlchemy==3.0.5
Flask-Login==0.6.3
pyodbc==4.0.39
Eine einfache Flask-Anwendung besteht aus wenigen Zeilen Code:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '<h1>Hallo Flask!</h1>'
if __name__ == '__main__':
app.run(debug=True)Import: Das Flask-Modul wird importiert und eine Anwendungsinstanz erstellt.
Route-Dekorator: @app.route('/')
definiert eine URL-Route für die Wurzel-URL.
View-Funktion: hello_world()
verarbeitet Anfragen an die definierte Route und gibt eine Antwort
zurück.
Anwendungsstart: app.run(debug=True)
startet den Entwicklungsserver mit aktiviertem Debug-Modus.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html', title='Startseite')
@app.route('/benutzer/<name>')
def benutzer(name):
return render_template('benutzer.html', benutzername=name)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)Für das obige Beispiel werden entsprechende HTML-Templates benötigt:
templates/base.html:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Flask Anwendung{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
{% block content %}{% endblock %}
</div>
</body>
</html>templates/index.html:
{% extends "base.html" %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
<div class="row">
<div class="col-md-12">
<h1>Willkommen zur Flask-Anwendung</h1>
<p>Dies ist eine einfache Flask-Anwendung mit Bootstrap-Integration.</p>
</div>
</div>
{% endblock %}Flask-Anwendungen sollten über Konfigurationsobjekte konfiguriert werden:
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'entwicklungsschluessel'
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///app.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
app = Flask(__name__)
app.config.from_object(Config)Der Debug-Modus bietet folgende Funktionalitäten:
Der Debug-Modus sollte ausschließlich in der Entwicklungsumgebung aktiviert werden. In Produktionsumgebungen stellt er ein Sicherheitsrisiko dar.
Für die Integration in Microsoft IIS wird das wfastcgi-Modul benötigt:
pip install wfastcgiDie web.config-Datei konfiguriert die IIS-Integration:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*"
modules="FastCgiModule"
scriptProcessor="C:\path\to\python.exe|C:\path\to\wfastcgi.py"
resourceType="Unspecified"
requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>Für die spätere Integration mit MS-SQL wird pyodbc vorbereitet:
import pyodbc
from flask import Flask
app = Flask(__name__)
# Datenbankverbindungsstring für MS-SQL
SQLSERVER_CONNECTION_STRING = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=servername;'
'DATABASE=datenbankname;'
'Trusted_Connection=yes;'
)
@app.route('/db-test')
def db_test():
try:
connection = pyodbc.connect(SQLSERVER_CONNECTION_STRING)
cursor = connection.cursor()
cursor.execute("SELECT @@VERSION")
version = cursor.fetchone()[0]
connection.close()
return f"Datenbankverbindung erfolgreich: {version}"
except Exception as e:
return f"Datenbankfehler: {str(e)}"Diese Grundlagen schaffen das Fundament für die Entwicklung komplexerer Flask-Anwendungen und die Integration mit bestehenden Unternehmensinfrastrukturen.