8 tolle kleine Python-Webframeworks

Aufgrund der Bequemlichkeit und Vielseitigkeit von Python wird Software zum Erstellen von Software in nahezu allen Bereichen des IT-Lebens verwendet. Eine wichtige Nische sind Webdienste, bei denen Pythons Entwicklungsgeschwindigkeit und flexible Metaphern es einfach machen, Websites schnell zum Laufen zu bringen.

Und genau wie Sie vielleicht erraten haben, bietet Python Ihnen viele Möglichkeiten und Spielräume für kleine und große Web-Frameworks. Schließlich muss nicht jedes Webprojekt unternehmensweit sein. Die meisten sollten gerade groß genug sein, um die Arbeit zu erledigen, und nicht größer. In diesem Artikel werden acht der bekanntesten Python-Frameworks vorgestellt, die sich durch Einfachheit, leichte Bereitstellung und einen engen Fokus auszeichnen.

Flasche

Die Flasche könnte als eine Art Mini-Flasche angesehen werden, da sie noch kompakter und prägnanter ist als das andere „Mikroframework“. Aufgrund seines minimalen Platzbedarfs eignet sich Bottle ideal für die Aufnahme in andere Projekte oder für die schnelle Bereitstellung kleiner Projekte wie REST-APIs. (Der Kolben wird unten besprochen.) 

Die gesamte Codebasis für Bottle passt in eine einzelne Datei und hat absolut keine externen Abhängigkeiten. Trotzdem ist Bottle mit genügend Funktionen ausgestattet, um gängige Arten von Web-Apps zu erstellen, ohne auf Hilfe von außen angewiesen zu sein.

Das Routing-System in Bottle, das URLs Funktionen zuordnet, hat fast genau die gleiche Syntax wie Flask. Sie sind auch nicht auf fest verdrahtete Pfade beschränkt. Sie können sie dynamisch erstellen. Anforderungs- und Antwortdaten, Cookies, Abfragevariablen, Formulardaten aus einer POST-Aktion, HTTP-Header und Datei-Uploads können über Objekte in Bottle abgerufen und bearbeitet werden.

Jede Funktion wurde mit viel Liebe zum Detail implementiert. Beispielsweise müssen Sie beim Hochladen von Dateien die Datei nicht umbenennen, wenn ihre Namenskonvention mit dem Zieldateisystem in Konflikt steht (z. B. Schrägstriche im Namen unter Windows). Flasche kann das für Sie tun.

Bottle enthält eine eigene einfache HTML-Template-Engine. Auch hier ist der Template-Motor, obwohl er minimal ist, mit allen wesentlichen Elementen ausgestattet. In einer Vorlage enthaltene Variablen werden standardmäßig mit sicherem HTML gerendert. Sie müssen angeben, welche Variablen sicher reproduziert werden können. Wenn Sie die Vorlagen-Engine von Bottle lieber gegen eine andere wie Jinja2 austauschen möchten, können Sie dies mit Bottle ohne großen Aufwand tun. Ich bevorzuge das mit Bottle gebündelte Simple-Template-System. Es ist schnell, seine Syntax ist unprätentiös und es ermöglicht Ihnen, Code und Vorlagentext ohne übermäßige Schwierigkeiten zu mischen.

Bottle unterstützt sogar mehrere Server-Backends. Es verfügt über einen eigenen integrierten Miniserver für schnelle Tests, unterstützt jedoch auch generisches WSGI, eine Vielzahl von WSGI-kompatiblen HTTP-Servern und bei Bedarf einfaches altes CGI.

Bottle benötigt nicht so viel Dokumentation wie andere Frameworks, aber die Dokumente sind keineswegs knapp. Alle wichtigen Dinge passen auf eine einzige (wenn auch lange) Webseite. Darüber hinaus finden Sie eine vollständige Dokumentation für jede API, Beispiele für die Bereitstellung auf verschiedenen Infrastrukturen, eine Erläuterung der integrierten Vorlagensprache und eine Reihe gängiger Rezepte.

Wie bei Flask können Sie die Funktionalität von Bottle manuell oder über Plug-Ins erweitern. Flaschen-Plug-Ins sind bei weitem nicht so zahlreich wie die von Flask, aber es gibt nützliche Elemente, wie die Integration in verschiedene Datenbankebenen und die grundlegende Benutzerauthentifizierung. Für die asynchrone Unterstützung kann Bottle einen der vorhandenen Serveradapter verwenden, der asynchron ausgeführt wird, z. B. aiohttp / uvloop, jedoch async/awaitnicht nativ unterstützt wird.

Eine Folge des Minimalismus von Bottle ist, dass einige Gegenstände einfach nicht da sind. Die Formularvalidierung, einschließlich Funktionen wie CSRF-Schutz (Cross-Site Request Forgery), ist nicht enthalten. Wenn Sie eine Webanwendung erstellen möchten, die ein hohes Maß an Benutzerinteraktion unterstützt, müssen Sie diese Unterstützung selbst hinzufügen.

Ein weiteres Problem bei Bottle ist, dass die Entwicklung ins Stocken geraten ist. Die letzte Punktversion, 0.12, kam 2013 an. Allerdings wird Bottle weiterhin gewartet und die Entwicklungsversionen bleiben für die Produktion verwendbar. Die Entwickler beabsichtigen, neue Versionen bereitzustellen, die Unterstützung für ältere Python-Editionen bieten.

CherryPy

CherryPy gibt es seit fast 20 Jahren in der einen oder anderen Form, aber es hat nicht den Minimalismus und die Eleganz verloren, die es von Anfang an auszeichneten.

Das Ziel von CherryPy besteht darin, sich so weit wie möglich nicht wie ein „Webframework“, sondern wie jede andere Art von Python-Anwendung zu fühlen. Websites wie Hulu und Netflix haben CherryPy in der Produktion verwendet, da das Framework eine äußerst unauffällige Basis bietet, auf der aufgebaut werden kann. CherryPy verwendet gepoolte Threads unter der Haube, um Multithread-Serveradapter besser zu unterstützen.

Mit CherryPy können Sie Ihre Webanwendung von der Kernlogik fernhalten. Um die Funktionen Ihrer Anwendung URLs oder Routen zuzuordnen, die von CherryPy bereitgestellt werden, erstellen Sie eine Klasse, in der die Namespaces der Objekte direkt den URLs zugeordnet werden, die Sie bereitstellen möchten. Das Stammverzeichnis der Website wird beispielsweise von einer Funktion namens "index" bereitgestellt. An diese Funktionen übergebene Parameter werden verwendet, um Variablen zu verarbeiten, die von GET- oder POST-Methoden bereitgestellt werden.

Die Bits, die CherryPy enthält, sollen als Bausteine ​​auf niedriger Ebene funktionieren. Sitzungskennungen und Cookie-Behandlung sind enthalten, HTML-Vorlagen jedoch nicht. Wie Bottle bietet CherryPy eine Möglichkeit, Routen Verzeichnissen auf der Festplatte zuzuordnen, um statische Dateien bereitzustellen.

CherryPy greift häufig auf eine vorhandene Bibliothek eines Drittanbieters zurück, um eine Funktion zu unterstützen, anstatt sie nativ bereitzustellen. Beispielsweise werden WebSocket-Anwendungen nicht direkt von CherryPy unterstützt, sondern über die ws4py-Bibliothek.

Die Dokumentation für CherryPy enthält eine praktische Anleitung zu den verschiedenen Aspekten des Programms. Im Gegensatz zu einigen anderen Framework-Tutorials führt es Sie nicht durch eine vollständige End-to-End-Anwendung, ist aber dennoch nützlich. Die Dokumente enthalten praktische Hinweise zur Bereitstellung auf virtuellen Hosts, zum Reverse Proxy über Apache und Nginx sowie zu vielen anderen Szenarien.

Falke

Wenn Sie REST-basierte APIs erstellen und sonst nichts, wurde Falcon nur für Sie erstellt. Schlank und schnell, mit fast keinen Abhängigkeiten über die Standardbibliothek hinaus, bietet Falcon alles, was Sie für REST-APIs benötigen, und nichts weiter. Falcon 2.0, das 2019 veröffentlicht wurde, beseitigt die Python 2.x-Unterstützung und erfordert mindestens Python 3.5.

Ein großer Teil davon, warum Falcon das Label „leicht und schlank“ erhält, hat wenig mit der Anzahl der Codezeilen im Framework zu tun. Dies liegt daran, dass Falcon Anwendungen fast keine eigene Struktur auferlegt. Eine Falcon-Anwendung muss lediglich angeben, welche Funktionen welchen API-Endpunkten zugeordnet sind. Das Zurückgeben von JSON von einem Endpunkt umfasst nur das Einrichten einer Route und das Zurückgeben der Daten über die json.dumpsFunktion aus der Python-Standardbibliothek. Die Unterstützung für Async ist in Falcon noch nicht gelandet, aber es wird daran gearbeitet, dies in Falcon 3.0 zu erreichen.

Falcon verwendet auch vernünftige Standardeinstellungen, sodass für die Einrichtung nur wenig Basteln erforderlich ist. Beispielsweise werden 404s standardmäßig für jede Route ausgelöst, die nicht explizit deklariert ist. Wenn Sie Fehler an den Client zurückgeben möchten, können Sie eine von mehreren mit dem Framework gebündelten Bestandsausnahmen auslösen (z. B. HTTPBadRequest) oder eine generische falcon.HTTPErrorAusnahme verwenden. Wenn Sie für eine Route eine Vor- oder Nachbearbeitung benötigen, bietet Falcon auch für diese Hooks Hooks an.

Aufgrund des Fokus von Falcon auf APIs gibt es hier wenig, um Webanwendungen mit herkömmlichen HTML-Benutzeroberflächen zu erstellen. Erwarten Sie beispielsweise nicht viel von Formularverarbeitungsfunktionen und CSRF-Schutzwerkzeugen. Trotzdem bietet Falcon elegante Optionen zur Erweiterung seiner Funktionalität, sodass anspruchsvollere Elemente hergestellt werden können. Neben dem oben genannten Hooking-Mechanismus finden Sie eine Schnittstelle zum Erstellen von Middleware, mit der alle APIs von Falcon verpackt werden können.

Die Dokumentation für Falcon ist im Vergleich zu anderen Frameworks schlank, aber nur, weil weniger zu behandeln ist. Das Benutzerhandbuch enthält eine formelle Schritt-für-Schritt-Anleitung aller wichtigen Funktionen sowie einen Schnellstartabschnitt, in dem Sie Beispielcode mit oder ohne Anmerkungen anzeigen können.

FastAPI

Der Name von FastAPI ist eine gute Zusammenfassung dessen, was es tut. Es wurde entwickelt, um API-Endpunkte schnell zu erstellen, und es läuft auch schnell.

FastAPI verwendet das Starlette-Projekt für seinen Hochgeschwindigkeits-Netzwerkkern, aber Sie müssen nicht über die Interna von Starlette Bescheid wissen, um FastAPI verwenden zu können. Sie definieren Endpunkte ähnlich wie eine Flask- oder Flaschen-App. Verwenden Sie Dekoratoren, um anzugeben, welche Funktionen welche Routen verarbeiten, und geben dann Wörterbücher zurück, die automatisch in JSON übersetzt werden.

Sie können leicht überschreiben, wie Dinge zurückgegeben werden. Wenn Sie beispielsweise HTML / XML von einigen Endpunkten zurückgeben möchten, können Sie dies tun, indem Sie einfach ein benutzerdefiniertes ResponseObjekt zurückgeben. Wenn Sie benutzerdefinierte Middleware hinzufügen möchten, können Sie alles einfügen, was dem ASGI-Standard entspricht. 

FastAPI verwendet Pythons Typhinweise, um Einschränkungen für die Arten von Daten bereitzustellen, die Routen akzeptieren. Wenn Sie beispielsweise eine Route mit dem Typ haben Optional[int], lehnt FastAPI alle Übermittlungen mit Ausnahme von Ganzzahlen ab. Sie müssen Ihren Endpunkten keinen Datenüberprüfungscode hinzufügen. Sie können einfach Typhinweise verwenden und FastAPI die Arbeit überlassen.

Natürlich werden einige Dinge ausgelassen. Es gibt zum Beispiel keine native HTML-Vorlagen-Engine, aber es gibt keinen Mangel an Lösungen von Drittanbietern, um diese Lücke zu schließen. Das Gleiche gilt für die Datenbankkonnektivität, aber die Dokumentation enthält Details dazu, wie bestimmte ORMs (z. B. Peewee) dazu gebracht werden können, mit dem asynchronen Verhalten von FastAPI zu arbeiten.

Flasche

Viele Diskussionen über Python-Webframeworks beginnen mit Flask, und das aus gutem Grund. Flask ist ein gut etabliertes, gut verstandenes Framework, das einfach zu bedienen und recht stabil ist. Es ist nahezu unmöglich, mit Flask für ein leichtes Webprojekt oder eine grundlegende REST-API etwas falsch zu machen, aber wenn Sie versuchen, etwas Größeres zu erstellen, werden Sie mit schwerem Heben konfrontiert sein.

Der zentrale Reiz von Flask ist die niedrige Eintrittsbarriere. Eine einfache "Hallo Welt" -App kann in weniger als 10 Zeilen Python eingerichtet werden. Flask enthält ein weit verbreitetes HTML-Template-System, Jinja2, um das Rendern von Text zu vereinfachen. Jinja2 kann jedoch gegen eine beliebige Anzahl anderer Template-Engines (z. B. Moustache) ausgetauscht werden oder Sie können Ihre eigenen rollen.

Im Namen der Einfachheit lässt Flask Feinheiten wie eine Datenschicht oder ORM aus und bietet keine Bestimmungen für die Formularvalidierung. Flask kann jedoch durch Erweiterungen erweitert werden, von denen es Dutzende gibt, die viele gängige Anwendungsfälle wie Caching, Formularverarbeitung und -validierung sowie Datenbankkonnektivität abdecken. Mit diesem standardmäßigen Lean-Design können Sie mit dem Engineering einer Flask-Anwendung mit einem absoluten Minimum an Funktionalität beginnen und dann nur die Teile einlagern, die Sie benötigen, wenn Sie sie benötigen.

Die Dokumentation von Flask ist freundlich und leicht zu lesen. Das Schnellstartdokument bietet einen hervorragenden Einstieg und erläutert die Bedeutung der Standardoptionen für eine einfache Flask-Anwendung. Die API-Dokumente enthalten zahlreiche gute Beispiele. Hervorragend ist auch die Sammlung von Flash-Snippets, die schnelle und schmutzige Beispiele für die Ausführung bestimmter Aufgaben sind, z. B. die Rückgabe eines Objekts, falls vorhanden, oder ein 404-Fehler, wenn dies nicht der Fall ist.

Flask erreichte 2018 seinen Meilenstein 1.0, wobei Python 2.6 und Python 3.3 die minimal unterstützten Versionen waren und viele seiner Verhaltensweisen endgültig in Stein gemeißelt waren. Flask unterstützt die asynchrone Syntax von Python nicht explizit, aber eine API-kompatible Variante von Flask namens Quart wurde ausgegliedert, um diese Anforderung zu erfüllen.

Pyramide

Pyramid ist klein und leicht und eignet sich gut für Aufgaben wie das Bereitstellen von vorhandenem Python-Code als REST-API oder das Bereitstellen des Kerns für ein Webprojekt, bei dem der Entwickler den größten Teil des schweren Hebens erledigt.

"Pyramid ermöglicht es Ihnen, schnell produktiv zu werden und mit Ihnen zu wachsen", heißt es in der Dokumentation. "Es wird Sie nicht zurückhalten, wenn Ihre Anwendung klein ist, und es wird Ihnen nicht im Weg stehen, wenn Ihre Anwendung groß wird."

Eine gute Möglichkeit, den Minimalismus von Pyramid zu beschreiben, wäre „frei von Richtlinien“, ein Begriff, der im Abschnitt der Dokumentation verwendet wird, in dem erläutert wird, wie sich Pyramid gegenüber anderen Webframeworks entwickelt. Grundsätzlich bedeutet „frei von Richtlinien“, dass es nicht um Pyramid geht, welche Datenbank oder welche Vorlagensprache Sie verwenden.

Es ist sehr wenig Arbeit erforderlich, um eine grundlegende Pyramid-Anwendung zu erstellen. Wie bei Bottle and Flask kann eine Pyramid-Anwendung neben den Dateien für das Framework selbst aus einer einzelnen Python-Datei bestehen. Eine einfache Ein-Routen-API erfordert nicht mehr als ein Dutzend Codezeilen. Das meiste davon sind Boilerplate-ähnliche from … importAnweisungen und das Einrichten des WSGI-Servers.

Standardmäßig enthält Pyramid mehrere Elemente, die in Webanwendungen häufig vorkommen, sie werden jedoch als zusammenzufügende Komponenten bereitgestellt und nicht als vollständige Lösungen. Die Unterstützung für Benutzersitzungen bietet beispielsweise sogar einen CSRF-Schutz. Die Unterstützung von Benutzerkonten wie Anmeldungen oder Kontoverwaltung ist jedoch nicht Teil des Geschäfts. Sie müssen es selbst rollen oder über ein Plug-In hinzufügen. Gleiches gilt für die Formularverarbeitung und Datenbankverbindungen.

Pyramid bietet sogar die Möglichkeit, Vorlagen aus früheren Pyramid-Projekten zu erstellen, um frühere Arbeiten wiederzuverwenden. Diese Vorlagen, die als „Gerüste“ bezeichnet werden, generieren eine Pyramid-App mit einfachem Routing und einigen Starter-HTML / CSS-Vorlagen. Zu den gebündelten Gerüsten gehören ein Beispiel-Starterprojekt und ein Projekt, das über die beliebte Python-Bibliothek SQLAlchemy eine Verbindung zu Datenbanken herstellt.