5 große und leistungsstarke Python-Webframeworks

Wenn Sie ein Back-End für eine Website oder einen Dienst erstellen, auch wenn es auf den ersten Blick bescheiden erscheint, werden Sie schnell feststellen, dass es alles andere als das ist. Sogar eine „einfache“ Site ist sehr komplex. Benutzerverwaltung, Datengestaltung, Übermittlung von Formularen, Sicherheit - all dies von Hand zu implementieren, wird mühsam.

Wenn Sie bei großen Webprojekten wissen, dass Sie alles und das Spülbecken benötigen, wenden Sie sich am besten an ein Framework, das Batterien (und Ladegeräte) enthält. Hier sind fünf schwergewichtige Webframeworks für Python, die alles enthalten, was Sie zum Erstellen robuster Webanwendungen benötigen, und noch einige mehr.

CubicWeb

CubicWeb wird als "Semantic Web Application Framework" bezeichnet, das die Wiederverwendung und das objektorientierte Design bevorzugt. Es ist ein faszinierendes System - wie Rick Grehan bei seiner Überprüfung im Jahr 2011 feststellte -, das die Verwendung von Abstraktionen und wiederverwendbaren Codebausteinen namens „Cubes“ betont. Tatsächlich ist CubicWeb für einige Entwickler möglicherweise zu abstrakt oder eigenwillig, und seine Entwicklungsgeschwindigkeit und sein Funktionsumfang liegen hinter anderen Frameworks zurück.

Cubes sind Softwarekomponenten mit einem Schema (Datenmodell), Entitäten (Programmierlogik) und Ansichten. Durch Zusammenstellen mehrerer Cubes, von denen jeder seine eigene Aufgabe ausführt, können Sie Softwareanwendungen erstellen, indem Sie Ihren eigenen Code und den Code anderer wiederverwenden.

Im Kern bietet CubicWeb ein grundlegendes Gerüst, das von jeder Web-App verwendet wird: ein „Repository“ für Datenverbindungen und Speicherung; eine „Web-Engine“ für grundlegende HTTP-Anforderungs- / Antwort- und CRUD-Aktionen; und ein Schema zum Modellieren von Daten. All dies wird in Python-Klassendefinitionen beschrieben.

Um Instanzen von CubicWeb einzurichten und zu verwalten, arbeiten Sie mit einem Befehlszeilentool, das dem für Django verwendeten ähnlich ist. Mit einem integrierten Template-System können Sie programmgesteuert HTML-Ausgaben generieren. Sie können auch einen Cube verwenden, der Tools für Web-Benutzeroberflächen bereitstellt, z. B. für das Bootstrap-HTML-Framework.

Obwohl CubicWeb Python 3 (seit Version 3.23) unterstützt, scheint es nicht die native asynchrone Funktionalität von Python 3 zu verwenden. Ein Umweg, um Async einzuschließen, besteht darin, das Modul cubicweb.pyramid zu verwenden, um das Pyramid-Framework als Webserver zu verwenden, und auf einen Zweig von Pyramid zuzugreifen, der asynchrone Konstruktionen verwendet. Es ist auch möglich, Aufgaben asynchron mit dem Cubicweb-Worker-Cube auszuführen. Aber alles, was einfacher ist, scheint vorerst unerreichbar.

Um persistente Daten in einer CubicWeb-App abzurufen oder zu bearbeiten, verwenden Sie Relation Query Language (RQL), die eine vage SQL-ähnliche Syntax verwendet, jedoch dem SparQL des W3C nachempfunden ist. Die Rechtfertigung von CubicWeb hierfür ist wiederum die Abstraktion: RQL bietet eine stark entkoppelte Route, um verschiedene Datenquellen miteinander zu verknüpfen.

Da CubicWeb viele Abhängigkeiten aufweist, ist es am besten, pip installsie alle abzurufen. Möglicherweise müssen Sie auch einige manuelle Anpassungen an der lokalen Umgebung vornehmen. Dies steht im Gegensatz zu anderen Frameworks, bei denen nur das Ausführen pip installoder Ablegen des Framework-Codes in einem Unterordner eines anderen Projekts erforderlich ist. Oder Sie können einen Docker-Container verwenden, um die Dinge zum Laufen zu bringen.

CubicWeb bezeichnet seine langwierige Dokumentation als "das Buch". Die Autoren des Buches haben sich die Zeit genommen, um den ungewöhnlichen Ansatz von CubicWeb zu erläutern, zu demonstrieren, wie einige grundlegende Anwendungen erstellt werden, API-Referenzen einzuschließen und im Allgemeinen alles daran zu setzen, um genau zu sein.

CubicWeb befindet sich weiterhin in einer aktiven, wenn auch langsamen Entwicklung. Pläne für CubicWeb 4.0 wurden seit 2012 überlegt, aber es wurde noch kein Zeitplan für die Bereitstellung angeboten.

Django

In den zehn Jahren und Veränderungen seit dem Erscheinen von Django hat es sich zu einem der am weitesten verbreiteten Frameworks von Python für die Erstellung von Webanwendungen entwickelt. Django wird mit fast jeder Batterie geliefert, die Sie möglicherweise benötigen. Dadurch eignet es sich besser für große Anwendungen als für kleine.

Django saß viele Jahre in Version 1.x. Als Django 2.0 Ende 2017 eintraf, wurde die Kompatibilität mit Python 2 zugunsten von Python 3.4 und höher eingestellt. Django 3.0, das im Dezember 2019 veröffentlicht wurde, erfordert Python 3.6 oder besser und bietet Unterstützung für den neuen asynchronen ASGI-Standard für Python-Webanwendungen.

Ein wesentlicher Teil der Attraktivität von Django ist die Bereitstellungsgeschwindigkeit. Da Django so viele Teile enthält, die Sie für die Entwicklung einer durchschnittlichen Webanwendung benötigen, können Sie sich schnell bewegen. Routing, URL-Analyse, Datenbankkonnektivität einschließlich eines ORM (Object Relational Mapper), Formularvalidierung, Angriffsschutz und Vorlagen sind integriert.

Sie finden Bausteine ​​für die gängigsten Webanwendungsszenarien. Die Benutzerverwaltung ist beispielsweise auf den meisten Websites zu finden, daher bietet Django sie als Standardelement an. Anstatt ein eigenes System zum Verfolgen von Benutzerkonten, Sitzungen, Kennwörtern, An- und Abmeldungen, Administratorrechten usw. erstellen zu müssen, bietet Django diese Funktionen nativ an. Sie können unverändert verwendet oder erweitert werden, um neue Anwendungsfälle mit minimalem Arbeitsaufwand zu erfassen.

Django verfügt über vernünftige und sichere Standardeinstellungen, die Ihre Webanwendung vor Angriffen schützen. Wenn Sie eine Variable in eine Seitenvorlage einfügen, z. B. eine Zeichenfolge mit HTML oder JavaScript, wird der Inhalt nur dann wörtlich gerendert, wenn Sie die Instanz der Variablen explizit als sicher festlegen. Dies allein beseitigt viele häufig auftretende Probleme mit Cross-Site-Skripten. Wenn Sie eine Formularvalidierung durchführen möchten, können Sie alles verwenden, vom einfachen CSRF-Schutz bis hin zu umfassenden Feld-für-Feld-Validierungsmechanismen, die detaillierte Fehlerrückmeldungen zurückgeben.

Ein so umfangreiches und umfassendes Feature-Set wie das von Django wäre ohne eine solide Dokumentation nicht besonders gut. Die Django-Dokumentation befasst sich aus verschiedenen Blickwinkeln mit allen Aspekten des Frameworks. Arbeiten Sie mit Python 3 oder anderen Sprachvarianten, machen Sie die Sicherheit richtig, implementieren Sie allgemeine Webanwendungskomponenten (wie Sitzungen oder Paginierung) und erstellen Sie Sitemaps - alles wird behandelt. Die APIs für jede Ebene der Anwendung - Modell, Ansicht und Vorlage - werden ebenfalls ausführlich beschrieben.

Mit großer Kraft geht jedoch auch eine große Komplexität einher. Django-Anwendungen haben den Ruf, kopflastig und mit vielen beweglichen Teilen behaftet zu sein. Selbst eine einfache Django-App erfordert eine Menge Konfiguration, um ausgeführt zu werden. Wenn Sie nur ein paar einfache REST-Endpunkte einrichten möchten, ist Django mit ziemlicher Sicherheit übertrieben.

Django hat auch seine Macken. Beispielsweise können Seitenvorlagen keine aufrufbaren Dateien verwenden. Beispiel: Sie können {{user.name}}als Komponente in einer Vorlage übergeben, jedoch nicht {{user.get_name()}}. Dies ist eine der Möglichkeiten, mit denen Django sicherstellt, dass Vorlagen Sie nicht versehentlich in den Fuß schießen, aber diese Einschränkungen können erschütternd sein, wenn Sie nicht darauf vorbereitet sind. Es gibt zwar Problemumgehungen, diese beeinträchtigen jedoch tendenziell die Leistung.

Ab Version 3.0 bietet Django Unterstützung für asynchrone Ansichten. Leider wird Async in anderen Teilen des Django-Stacks wie dem ORM noch nicht unterstützt. Sie können Django jedoch mithilfe von ASGI bereitstellen, um die Vorteile asynchroner Ansichten voll auszuschöpfen.

Web2py

In der Welt der Ruby-Programmierung ist Ruby on Rails das De-facto-Webframework. Der Informatikprofessor der DePaul University, Massimo Di Pierro, wurde von Rails inspiriert, ein Webframework in Python zu erstellen, das ähnlich einfach einzurichten und zu verwenden war. Das Ergebnis ist Web2py.

Die größte Attraktion von Web2py ist die integrierte Entwicklungsumgebung. Wenn Sie eine Instanz von Web2py einrichten, erhalten Sie eine Weboberfläche, im Wesentlichen einen Online-Python-Anwendungseditor, über den Sie die Komponenten der App konfigurieren können. Dies bedeutet normalerweise das Erstellen von Modellen, Ansichten und Controllern, die jeweils über Python-Module oder HTML-Vorlagen beschrieben werden. Einige Beispiel-Apps werden standardmäßig mit Web2py geliefert. Sie können diese auseinander nehmen, um zu sehen, wie sie funktionieren, oder sie als Startervorlagen verwenden, um Ihre eigenen Apps zu erstellen.

Entwickler stellen Web2py normalerweise bereit, indem sie den Quellcode herunterladen und darauf aufbauen. Für weniger technische Benutzer unter Windows oder MacOS bieten die Entwickler von Web2py Versionen an, die im Wesentlichen eigenständige Server sind. Laden Sie eine dieser Versionen herunter, entpacken Sie sie und führen Sie sie aus. Sie verfügen über einen lokalen Webserver mit einer vorkonfigurierten Kopie von Web2py. Dies ist eine gute Möglichkeit, eine Web2py-App zu erstellen, die bei Bedarf an anderer Stelle bereitgestellt werden kann.

Die Weboberfläche von Web2py wurde mit Bootstrap 4 erstellt, ist also augenschonend und einfach zu navigieren. Der In-Browser-Editor ist kein Ersatz für eine vollständige IDE, verfügt jedoch über hilfreiche Hilfsmittel wie Zeilennummerierung und Hervorhebung der Python-Syntax (einschließlich automatischer Einrückung). Ebenfalls enthalten ist eine schnelle Weboberfläche zur Python-Shell, sodass Sie über die Befehlszeile mit Web2py interagieren können - eine nette Konzession für Experten.

Das in Web2py verwendete Datenabstraktionssystem funktioniert etwas anders als Djangos ORM und andere davon inspirierte ORMs (wie Peewee). Diese Systeme verwenden Python-Klassen, um Modelle zu definieren, während Web2py Konstruktorfunktionen verwendet, um Modelle define_tablezu instanziieren. Die Unterschiede sind wahrscheinlich nur dann erschütternd, wenn Sie an den anderen Weg gewöhnt sind. Sie sollten Neulinge nicht beunruhigen. Es ist unwahrscheinlich, dass Sie Probleme haben, Web2py an einen Datenanbieter anzuhängen, da es mit fast allen wichtigen vorhandenen Datenbanken kommuniziert.

Eine wirklich nützliche datenbankbezogene Funktion in Web2py ist die Möglichkeit, ein Diagramm der Modelle zu erstellen, mit dem Sie visualisieren können, wie Ihre Modelle zueinander in Beziehung stehen. Sie müssen jedoch die PyGraphviz-Bibliothek installieren, um diese Funktion zu aktivieren.

Web2py bietet viele weitere professionelle Komponenten: Internationalisierungsfunktionen, mehrere Caching-Methoden, Zugriffskontrolle und Autorisierung und sogar Front-End-Effekte (z. B. eine Datumsauswahl in Formularen) über die integrierte Unterstützung für jQuery und AJAX. Hooks für externe und interne Middleware sind ebenfalls enthalten, obwohl Sie Middleware nicht verwenden dürfen, um die Kernfunktionen von Web2py zu ersetzen. Die asynchrone Funktionalität von Python in Web2py wird jedoch noch nicht explizit verwendet, obwohl es einen Scheduler für die Bearbeitung lang laufender Aufgaben gibt. 

Kein Wunder, dass die Dokumentation von Web2py als "das Buch" bezeichnet wird. Erstens deckt es eine erstaunliche Menge an Material zu Web2py, Python und den für beide verwendeten Bereitstellungsumgebungen ab. Zweitens ist es in einem leicht zugänglichen, narrativen Stil geschrieben. Drittens wird ausführlich über gängige Anwendungserstellungsszenarien gesprochen. Es gibt zum Beispiel ein ganzes Kapitel über die Verwendung von jQuery zum Erstellen von AJAX-Anwendungen.

Weppy

Weppy fühlt sich wie eine halbe Strecke zwischen der minimalen Einfachheit von Flask und der Vollständigkeit von Django an. Während die Entwicklung einer Weppy-App die Unkompliziertheit von Flash aufweist, bietet Weppy viele Funktionen in Django, wie Datenschichten und Authentifizierung. Daher eignet sich Weppy für Apps, die von extrem einfach bis bescheiden anspruchsvoll reichen.

Auf den ersten Blick ähnelt der Weppy-Code stark dem Flaschencode oder dem Flaschencode. Es sind nur wenige Anweisungen erforderlich, um eine einfache Website mit nur einer Route zum Laufen zu bringen. Routen können durch Funktionsdekoratoren (auf einfache Weise) oder programmgesteuert beschrieben werden, und die Syntax hierfür ist eng mit Flask / Bottle verknüpft. Das Templating funktioniert ungefähr gleich, abgesehen von geringfügigen Abweichungen in der Syntax.

Weppy kontrastiert mit diesen kleineren Frameworks, indem es einige Funktionen enthält, die nur als Plug-Ins oder Add-Ons enthalten sind. Beispielsweise verfügen weder Flask noch Bottle über ein integriertes ORM oder ein Datenverwaltungssystem. Weppy enthält ein ORM, das jedoch eher auf dem pyDAL-Projekt als auf der weitaus populäreren SQLAlchemy basiert. Weppy unterstützt sogar Schemamigrationen, die Django im Rahmen seines ORM unterstützt (das Migrationssystem von Django ist auch wesentlich automatisierter). Während Weppy über einen Erweiterungsmechanismus verfügt, ist die Liste der offiziell genehmigten Add-Ons winzig und weitaus kleiner als der Katalog der Erweiterungen für Flask.

Leichtere Frameworks wie Weppy werden häufig zum Erstellen von RESTful-APIs verwendet, und Weppy ist zu diesem Zweck mit praktischen Funktionen ausgestattet. Wenn Sie einen @serviceDekorator auf eine Route setzen, werden die von Ihnen zurückgegebenen Daten automatisch in JSON oder XML formatiert.

Weppy enthält andere Funktionen, die eher einem größeren Framework entsprechen, jedoch ohne großen Aufwand implementiert werden. Beispiele hierfür sind Datenvalidierungsmechanismen, Formularverarbeitung, Antwort-Caching und Benutzervalidierung. In all diesen Fällen verfolgt Weppy einen „gerade genug“ Ansatz. Die bereitgestellten Funktionen sind nicht so vollständig wie in Django und anderen Schwergewichts-Frameworks, aber ein Entwickler muss nicht viel Arbeit investieren, um sie nützlich zu machen, und sie können jederzeit nachträglich erweitert werden.

Eine weitere wichtige Funktion von Weppy ist die Unterstützung der Internationalisierung. Zeichenfolgen in Vorlagen können gemäß den mit der Anwendung bereitgestellten Gebietsschemadateien übersetzt werden, bei denen es sich um einfache Python-Wörterbücher handelt. Die Wahl der Sprache kann auch durch Parsen der Browseranforderung (dh des HTTP-Headers "Accept-Language") oder durch Binden einer Übersetzung an eine bestimmte Route festgelegt werden.

Die Dokumentation von Weppy hat den gleichen Geschmack wie das Framework selbst. Es ist sauber, lesbar und geschrieben, um von Menschen konsumiert zu werden. Abgesehen von dem üblichen Beispiel „Hallo Welt“ enthält es ein schönes Tutorial, mit dem Sie ein Microblogging-System als Starterprojekt erstellen können.

Langfristige Pläne für Weppy beinhalten die Unterstützung von Async und Sockets als erstklassige Einheiten auf niedriger Ebene. Die Entwickler von Weppy planen, diese Funktionen in Version 2.0 einzuführen und dann Python 3.7 oder besser für alle zukünftigen Versionen von Weppy zu benötigen.

Zope