Flask vs. Bottle vs. Django
Webframeworks
Ein Framework ist eine Sammlung von Programmpaketen und -modulen, mit deren Hilfe Entwickler Anwendungen erstellen können, ohne sich um die damit verbundenen Details kümmern zu müssen. Ohne Web-Frameworks müssten die Entwickler auf niedriger Ebene programmieren und sich selbst um wichtige Grundlagen wie Protokolle und Sockets oder Serverprotokolle kümmern.
Dabei sind Frameworks komplexer als die reinen Programmbibliotheken die dabei genutzt werden. Frameworks geben dabei die Vorgehensweise und Struktur stärker vor. Wird auf die Verwendung von Frameworks verzichtet und die Funktionalität durch die Verwendung von Libraries selbst realisiert ist, dann ist mehr Flexibiltät und Freiheit vorhanden. Der Preis dafür ist erhöhter Programmieraufwand.
Full-Stack- und Mikro-Framework
Ein Full-Stack-Framework (z.B. Django) bietet volle Funktionalität sowohl für das Front- als auch für das Backend. Full-Stack-Frameworks gelten als Komplettlösungen für alles, was Sie für die Erstellung von Webanwendungen benötigen, einschließlich Vorlagenlayouts, Formularvalidierung und Formulargenerierung.
Im Gegensatz zu Full-Stack-Frameworks bieten Micro-Frameworks (auch bekannt als Lightweight-Frameworks) weniger Funktionalität, insbesondere im Frontend. Auch hier gilt wieder: ein Mikro-Framework (z.B. Flask oder Bottle) bietet zwar insgesamt mehr Flexibilität als ein Full-Stack-Framework, aber man sollte darauf vorbereitet sein, mehr Zeit in die Code-Entwicklung für die Webentwicklung zu investieren.
Routing von URLs
Alle Webframeworks verfügen dabei über ein URL mapping oder auch Routing-Funktion, die einem bestimmten Pfad einer angefragten URL eine bestimmte Funktionalität zuweist.
Das ermöglicht die Verwendung kürzerer, "freundlicherer URLs", was die Einfachheit der Website erhöht und eine bessere Indizierung durch Suchmaschinen ermöglicht. Zum Beispiel könnte eine URL, die mit "/page.cgi?cat=science&topic=physics" endet, einfach in "/page/science/physics" geändert werden.
Django
Django als Full-Stack-Framework ist ein High-Level-Framework, das für die schnelle Entwicklung sicherer und sauber aussehender Anwendungen verwendet wird. "High-Level" heißt, dass die eigentliche Codierung während des App-Design-Prozesses minimiert werden soll.
Django-Routing

Django-Routing
Der Pfad einer URL weist bei Django auf eine View (Ansicht). Diese verwenden Models, um mit der Datenbank zu kommunizieren und Templates (Vorlagen) um HTML-Dateien zu "rendern" (to render = dt. darstellen).
Das Django-Modell übernimmt dabei die gesamte Kommunikation mit der Datenbank. Es ist keine SQL-Programmierung erforderlich, denn es enthält einen Object Relational Manager ORM, der Pythonobjekte in Datenbanktabellen konvertiert und umgekehrt (mapping = dt. Zuornung).
Zusammengenommen folgen diese Teile dem Model-View-Controller Pattern (MVC). MVC ist eine Methode zur Entwicklung von Software, bei der der Code für die Definition und den Zugriff auf Daten (das Modell) von der Logik zur Weiterleitung von Anfragen (dem Controller) getrennt ist, die wiederum von der Benutzeroberfläche (der Ansicht) getrennt ist. Django verwendet dabei eigene Bezeichnungen die MVC-Teile:
| Allgemeiner Fachbegriff |
Django-Begriff | Funktion |
|---|---|---|
| Model | Model | Enthält die gesamte Geschäftslogik. Zumindest aber die Logik für den Datenbankzugriff. |
| View | Template | Verantwortlich für die Erstellung des HTML und anderer UI-Elemente. |
| Controller | View | Enthält die Logik, um die anderen Teile miteinander zu verbinden und eine Antwort auf eine Benutzeranfrage zu erzeugen. |
Quelle: https://tandysony.com/2018/01/12/django-mvc.html (14.09.2022)
Flask und Bottle
Flask und Bottle sind leichtgewichtige Mikro-Frameworks, die zwar auch über ein URL-Mapping (Routing) verfügen, aber sonst nur eine minimale eingebaute Web-Funktionalität aufweisen.

Das URL-Mapping von Flask und Bottle verweist auf zu definierende Funktionen
Damit ist mehr Flexibilität vorhanden. So ist z.B. die Wahl des DBMS vollkommen frei, aber man muss sich selbst um die Auswahl des entsprechenden Packages bzw. um die SQL-Programmierung kümmern. Django hat auch z.B.
- Benutzerauthentifizierung
- Sicherheitsfunktionalität
integriert. Bei der Benutzung von Flask oder Bottle muss man sich um die Auswahl und Integration dieser Plugins und Komponenten selbst kümmern, bei Django dagegen sind diese Features integriert und die Vorgehensweise im Wesentlichen vorgegeben.
Flask and Bottle vs. Django
Django bietet als ausgereiftes Full-Stack-Framework viel fertig eingebaute Funktionalität, die allerdings auch die Funktionsweise etwas verdeckt. Die Komplexität erschwert den Einstieg in die Arbeit damit und macht den Lernprozess langwieriger.
Aus diesen didaktischen Gründen fällt in diesem Kurs die Wahl auf den Einsatz eines Mikro-Frameworks. Die Funktionalität ist kleiner und allein schon deswegen besser nachvollziehbar. Die Lernkurve ist steiler und Erfolge stellen sich rasch ein. Dabei ist die Flexibilität hoch und die Auswahl verschiedener Plugins, Packete oder Erweiterungen liegt beim Entwickler, was hier eine wünschenswerte Herausforderung darstellt.
Allerdings lohnt sich die Einarbeitung in Django durchaus für größere Projekte, um
die vorhandenen Features zu erlernen und nutzen zu können.
Sicherheitsaspekte und Performancegründe (hohe Skalierbarkeit) machen Django im Gegensatz zu den leichtgewichtigen
Mikro-Framworks eher zu einer "Production-Ready"-Lösung.
Flask vs. Bottle
Beide Mikro-Frameworks sind in Bezug auf die schnelle Erlernbarkeit aufgrund der geringeren Komplexität vergleichbar.
Flask kommt im Gegensatz zu Django dabei mit nur 2 Abhängigkeiten (engl. dependencies) aus:
- Werkzeug (Web Server Gateway Interface (WSGI) utility library)
- jinja2 (Django-inspirierte Template Engine)
Bottle weist sogar keinerlei Abhängigkeiten außerhalb der Python-Grundinstallation auf.
Allerdings ist Flask etwa 20x gebräuchlicher als Bottle (Vergleich der Downloads von Github, 14.09.2022). Das führt dazu, dass die helfende Community von Flask deutlich größer ist und auch die Dokumentation von Flask im Web besser ist.
Das letzte Argument lässt die Auswahl des Python Webframework in diesem Kurs auf Flask fallen.
Quellen:
https://www.codecademy.com/resources/blog/flask-vs-django/ (14.09.2022)
https://hackr.io/blog/flask-vs-django (14.09.2022)