Python-Frameworks können in einige Bereiche unterteilt werden, da Python eine sehr vielfältige Sprache ist und in verschiedenen Bereichen verwendet werden kann. Jedes dieser Felder hat seine eigenen Frameworks, von denen einige beliebter sind als andere. Eines der beliebtesten Felder, in denen Python angewendet wird, ist die Webentwicklung, auf die wir uns heute konzentrieren werden.
Die vorgestellten Frameworks lassen sich in drei Kategorien unterteilen: Full-Stack-Frameworks, die viele Out-of-the-Box-Funktionen für die Server- und Clientseite bieten; Microframeworks, die serverseitige Unterstützung bieten (manchmal können sie auf die Clientseite erweitert werden) und die Erstellung einer Webanwendung mit nur einer einzigen Python-Datei ermöglichen; und schließlich asynchrone Frameworks, die Anfragen asynchron verarbeiten.
Full-Stack-Web-Frameworks
Django
Django ist eines der beliebtesten Python-Frameworks. Es bietet viele Out-of-the-Box-Funktionen wie Admin-Panel oder generische Ansichten und Formulare. Djangos Hauptmerkmale sind:
-
ein Verwaltungsskript („manage.py „), mit dem die meisten Framework-spezifischen Aktionen ausgeführt werden können (z. B. Starten des Entwicklungsservers, Erstellen eines Administratorbenutzers, Sammeln statischer Dateien usw.),
-
synchrone Anforderungsverarbeitung,
-
MTV (model-Template-view) Architekturmuster (Variation des Model-View-Controller-Musters),
-
benutzerdefiniertes objektrelationales Mapping (ORM) für die Kommunikation mit der Datenbank,
-
Verwendung von Funktionen und Klassen zur Erstellung von Ansichtskontexten und zur Behandlung von Aktionen,
-
Django ist streng und erzwingt dem Entwickler seinen eigenen Codierungsstil – viel Metaprogrammierung,
-
sehr gute, umfangreiche Dokumentation mit Beispielen,
-
benutzerdefinierte HTML-Vorlagen. URL-Routing-System,
-
Einhaltung des WSGI-Standards,
-
Unterstützung für statische Dateien – URL-Routing sowie Erkennung und Sammlung,
-
eine große Anzahl externer Module, z.B. Django REST Framework, Django CMS, Django Channels (Websockets).
Django eignet sich gut für größere Projekte, bei denen umfangreiche Backend- und Frontend-Unterstützung erforderlich ist oder in Fällen, in denen die Zeit eine entscheidende Rolle spielt, da Django eine große Anzahl fertiger Komponenten bietet. Das Codieren in Django basiert hauptsächlich auf dem Anpassen generischer Codeteile. Der Entwickler muss eine Reihe von Regeln befolgen, die mit einem bestimmten Element geliefert werden. Für Projekte, bei denen viel Code-Flexibilität gewünscht wird, ist Django möglicherweise nicht die beste Wahl.
37.514 Github-Sterne / 183.588 StackOverflow-Fragen
Web2py
Web2py konzentriert sich auf Sicherheit, Entwicklungsgeschwindigkeit und Benutzerfreundlichkeit. Es bietet viele Funktionen aus der Box: ein Web-Server, Datenbank, Admin-Panel, Wiki oder Grid-Widgets. Die Hauptmerkmale sind:
-
synchrone Anforderungsverarbeitung,
-
benutzerdefinierte Datenbankabstraktionsschicht (DAL), die als ORM fungiert,
-
erzwingt eine MVC-Struktur,
-
Funktionen und Klassen können zum Erstellen von Controllern verwendet werden,
-
strikte Philosophie „Es sollte nur eine Möglichkeit geben, Dinge zu tun“,
-
umfangreiche Dokumentation mit vielen Beispielen,
-
benutzerdefinierte HTML-Engine, mit der Python-Code in den Vorlagen verwendet werden kann,
-
benutzerdefinierte Routing – URL-Funktion, die interne Pfade für die Aktionen und statischen Dateien generiert,
-
bietet statisches Dateirouting und Streaming während der Entwicklung,
-
verfügt über integrierte REST-Dienste, erfordert jedoch das Tornado-Framework für die Verwendung von Web-Sockets.
Unterstützung für den WSGI-Standard, aber es ist möglich, CGI (Common Gateway Interface), FastCGI, GAE (Google App Engine) oder andere zu verwenden,
Web2py wurde stark von Ruby on Rails und Django Frameworks inspiriert und nimmt das Beste aus beiden. Es kann eine gute Wahl für Programmierer sein, die von Ruby migrieren wollen oder für diejenigen, die mit Django gelangweilt sind, aber nach einem anderen großen und funktionsreichen Framework suchen.
Es bietet eine „Admin“ -App, die als webbasierte IDE für die Anwendungsentwicklung und -verwaltung (z. B. App-Erstellung, Code-Editor) fungiert. Es wird auch von PyCharm unterstützt.
Im Allgemeinen fehlen Web2Py keine Funktionen, die Django hat. Diese beiden Frameworks können verwendet werden, um die gleichen Aufgaben zu erfüllen. Web2Py ist jünger und hat eine kleinere Community als Django, daher ist es möglicherweise etwas schwieriger, bei Problemen Hilfe zu finden.
1.665 GitHub-Sterne / 2.004 StackOverflow-Fragen
TurboGears
TurboGears verbindet viele externe Dienste, um ein funktionales Framework zu erstellen:
-
synchrone Anforderungsverarbeitung,
-
model-View-Controller (MVC) -Muster,
-
verwendet SQLAlchemy ORM,
-
ermöglicht die Verwendung von Funktionen und die Kontexterzeugung von Klassenansichten,
-
Es bietet einige gebrauchsfertige generische Klassen (sehr interessanter ApiController für REST API erstellung),
-
Die Dokumentation ist ein wenig chaotisch, aber es könnte eine Frage der Gewöhnung sein,
-
verwendet die Kajiki-Vorlagensprache,
-
benutzerdefinierte URL-Routing- / Versandmethoden,
-
konform mit der WSGI standard,
-
unterstützt statische Dateien Pfadkonfigurationen
-
kann mit zusätzlichen Modulen erweitert werden, z. B. Circus und Chaussette für die Unterstützung von Web-Sockets.
Das Framework ist nicht so beliebt wie seine beiden Vorgänger, aber es lohnt sich trotzdem.
259 GitHub Sterne / 107 StackOverflow Fragen
Microframeworks
Flask
Es ist eines der beliebtesten Python-Microframeworks, es ist zuverlässig und schnell. Es wird gesagt, dass es als Witz geschaffen wurde. Die Hauptmerkmale des Rahmens sind:
-
synchrone Anforderungsunterstützung,
-
erzwingt keine Projektarchitektur, hat aber einige Empfehlungen (Paket, Modul, Blueprints),
-
Es bietet kein ORM, aber SQLAlchemy oder andere können verwendet werden,
-
unterstützt Funktionen sowie einige Django-ähnliche generische Klassenansichten (ab Flask 0.7),
-
loser Codierungsstil, es werden keine Lösungen erzwungen, die meisten Entscheidungen liegen im Ermessen des Entwicklers,
-
gute Dokumentation mit Beispielen,
-
Es ist möglich, Jinja2 HTML Template Engine zu verwenden,
-
Werkzeug Routing System,
-
konform mit dem WSGI-Standard ,
-
unterstützt grundlegendes statisches Datei-Routing,
-
kann mit einigen zusätzlichen Modulen von Drittanbietern erweitert werden, z. B. Flask-RESTful für die Erstellung von REST-APIs oder flask-socketio für die Unterstützung von Web-Sockets.
Dieses Framework wird in kleinen und mittleren Projekten den Trick machen. Es verfügt über einige Module von Drittanbietern, die bereit sind, sowie gute native Lösungen verwendet werden.
Flask sollte sich in Jobs bewähren, bei denen komplizierte benutzerdefinierte Funktionen erforderlich sind, Django jedoch für die Aufgabe zu groß erscheint. Auf der anderen Seite kann es schwierig sein, Flask von Anfang an für ein größeres Projekt einzurichten, da es keinen „offiziellen“ Weg gibt, dies zu tun.
39.946 Github-Sterne / 24.512 StackOverflow-Fragen
Pyramid
Pyramid beginnt mit einer minimalen Installation, die bei Bedarf erweitert werden kann. Es ist erwähnenswert, dass es Teil des Pylons-Projekts ist, das webbezogene Technologien integriert.
Dies sind einige der wichtigsten Merkmale von Pyramid:
-
bietet synchrone Anforderungsverarbeitung,
-
Ansichten Kontexte können sowohl mit Funktionen als auch mit Klassen definiert werden,
-
Es gibt kein spezifisches ORM, aber SQLAlchemy wird empfohlen,
-
erzwingt keinen Codierungsstil oder keine Projektarchitektur – TIMTOWTDI,
-
bietet eine gute Dokumentation mit Tutorials und Beispielen,
-
Es wird keine spezifische HTML-Template-Engine geliefert, aber Chameleon wird empfohlen,
-
Ein interessantes benutzerdefiniertes Routing-System ermöglicht es mehreren Ansichten, einer URL zu entsprechen,
-
es ist WSGI-konform,
-
umfangreiche Unterstützung für statische Dateien – files Serving, URL Routing für statische Dateien,
-
kann mit externen Modulen erweitert werden, z.B. Cornice für REST APIs, aiopyramid mit async Unterstützung.
Dieses Framework ist möglicherweise eine gute Wahl, wenn Sie keine Zeit mit dem Erlernen benutzerdefinierter Frameworks-Lösungen (wie ORM) verbringen möchten, aber dennoch ein umfangreiches Tool zum Erstellen von Software benötigen, da Pyramid die Verwendung vieler bekannter eigenständiger Lösungen unterstützt.
Es hat gute Skalierungsmöglichkeiten – wirbt sich als Rahmen, der „klein anfangen und groß beenden“ kann.
2.974 GitHub-Fragen / 2.060 StackOverflow-Fragen
CherryPy
Ermöglicht die Erstellung von Webanwendungen auf die gleiche Weise wie ein objektorientiertes Python-Projekt. Es hat keine Full-Stack-Funktionen und erzwingt keine spezifischen Lösungen – der Entwickler kann entscheiden, wie Probleme gelöst werden, die während der Entwicklung auftreten. Die Funktionen von CherryPy sind:
-
bietet synchrone Anforderungsunterstützung,
-
erzwingt keine Projektstruktur oder Architektur,
-
liefert kein ORM, aber SQLAlchemy oder SQLObject können verwendet werden,
-
liefert keine HTML–Template-Engine,
-
hat einen losen Codierungsstil,
-
bietet eine anständige Dokumentation,
-
das Routingsystem routes (Python-Version des Routingsystems) kann verwendet werden,
-
ist kompatibel mit WSGI,
-
hat eine gute Unterstützung für statische Dateien – ermöglicht das Servieren von Dateien oder ganzen ermöglicht die Erstellung von REST-APIs nur mit integrierten Tools,
-
erleichtert die Verwendung von Web-Sockets über das ws4py-Modul.
Der Hauptvorteil von CherryPy besteht darin, dass es mit einem produktionsbereiten WSGI-Server geliefert wird, der die Einrichtung eines externen Servers während der Bereitstellung überflüssig macht.
Der Hauptnachteil dieses Frameworks ist, dass es nicht sehr beliebt ist, daher hat es eine kleinere Anzahl von externen Modulen und eine weniger lebendige Community.
829 GitHub-Sterne / 1.244 StackOverflow-Fragen
BottlePy
Es ist ein weiteres Mikroframework, das sich als schnell und einfach bewirbt. Es ist erwähnenswert, dass BottlePy als einzelnes Modul ohne zusätzliche Abhängigkeiten geliefert wird. Funktion:
-
implementiert synchrone Anforderungsbehandlung,
-
bietet benutzerdefinierte HTML-Engine, aber andere Engines wie Mako, Jinja2 oder Cheetah könnten verwendet werden,
-
liefert kein ORM, aber es ist möglich, externe Lösungen zu verwenden, z. SQLAlchemy oder Macaron,
-
erzwingt keine Projektarchitektur,
-
bietet ausreichende Dokumentation,
-
verfügt über ein benutzerdefiniertes Routing-System, aber das Werkzeug–Routing-System kann verwendet werden (über bottle-werkzeug),
-
implementiert den WSGI-Standard,
-
,
-
bietet Greenlets (mit gevent) als asynchrone Request-Handling-Lösung an,
-
Es ist möglich, REST API ohne externe Module zu erstellen – unterstützt JSON-Client-Daten.
Aufgrund seiner geringen Größe (nur eine Datei) und ohne externe Abhängigkeiten (nur Python-Standardbibliothek) kann es eine gute Wahl für Anfänger sein, die mit dem Erlernen der Webentwicklung beginnen möchten.
Es könnte auch einen guten Job mit sehr kleinen Standorten oder Einweg-Tests. BottlePy ist nicht die beste Wahl für mittelgroße oder größere Projekte, da es einige Arbeit erfordern würde, um an den Punkt zu gelangen, an dem schwerere Frameworks beginnen.
5.795 GitHub-Sterne / 1.288 StackOverflow-Fragen
Asynchrone Frameworks
Aiohttp
Es ist ein umfangreiches asynchrones Python-Framework. Es bietet einen Server mit Middleware, Signalen, anmutigen Abschaltungen und vielem mehr:
-
asynchrone Anforderungsbehandlung, Client- und Server-Websockets,
-
Es ist möglich, GINO async ORM zu verwenden,
-
unterstützt funktions- und klassenbasierte Ansichten,
-
ausreichende Dokumentation, aber etwas schwer zu navigieren,
-
Es ist möglich, reine SQLAlchemy zu verwenden, aber GINO async wrapper wird empfohlen,
-
unterstützt Postgres, MySQL, Redis async Treiber,
-
keine Out-of-the-box Template Engine aber Jinja2 oder Mako könnte angewendet werden,
-
custom routing system,
-
keine WSGI Unterstützung,
-
unterstützt Routing für statische Dateien,
-
viele Module von Drittanbietern, die das Framework weiter erweitern können, z. B. aiohttp-apispec für die Erstellung von REST-APIs, aiohttp-security für Benutzerauthentifizierungen und Berechtigungen.
Da Aiohttp viele Funktionen bietet (z. B. Unterstützung für Client- und Serverseite, Websockets, Middleware, Signale), kann Aiohttp mit mittelgroßen Projekten (oder sogar mit größeren) verwendet werden.
6.378 Github-Sterne / 503 StackOverflow-Fragen
Sanic
Sanic ist ein sehr flask-ähnliches Framework: Es ist klein, liberal und lässt viel Platz für den Entwickler. Sein Hauptmerkmal ist seine Geschwindigkeit.
Hier sind einige andere Eigenschaften:
-
Unterstützung für async Request Handler,
-
bietet keine Datenbankschnittstellen, aber GINO async ORM kann installiert werden,
-
bietet Funktion und Klasse als Quelle des Ansichtskontexts,
-
Codierungsstil ist eher locker, sehr ähnlich zu Flask,
-
Dokumentation mit „readthedocs“ geliefert,
-
Jinja2 HTML Template Engine kann verwendet werden,
-
maßgeschneidertes Routing-System,
-
ist standardmäßig nicht WSGI-konform, aber ein Drittanbieter-Modul (sanic-dispatcher) kann installiert werden, um es zu unterstützen,
-
hat grundlegende static file Routing,
-
kann mit zusätzlichen Modulen erweitert werden, z.B. Sanic CRUD für die REST API Erstellung.
Es sollte eine gute Entscheidung sein, Sanic zu wählen, wenn Sie bereits Erfahrung mit Flask haben, da diese beiden Frameworks viel gemeinsam haben.
Sanic bietet Standardkonfiguration Handhabung, während in aiohttp zuvor erwähnt, muss der Benutzer es auf eigene Faust zu tun. Es verfügt über einige interessante Module von Drittanbietern wie einen Anforderungsratenbegrenzer oder eine GraphQL-Integration.
10.625 Github-Sterne / 58 StackOverflow-Fragen
Tornado
Tornado ist ein Python-Webframework und eine asynchrone Netzwerkbibliothek, die ursprünglich bei FriendFeed (einer Social Aggregation Site) entwickelt wurde. Dank dessen bietet es eine integrierte Integration in soziale Dienste wie Google, Facebook und Twitter.
Die Integration mit anderen Frameworks und Bibliotheken ist ebenfalls möglich: Twisted-, Asyncio- oder sogar WSGI-Anwendungen. Die Funktionen von Tornado:
-
bietet viele generische Klassen, die zum Erstellen der Anwendung verwendet werden können, z. Router oder SocketHandler für Websockets,
-
benutzerdefinierte HTML-Template-Engine,
-
klare und leicht lesbare Dokumentation,
-
Funktionen und Klassen können zum Definieren von Aktionen und zum Bearbeiten von Anforderungen verwendet werden,
-
benutzerdefinierte Routing–Behandlung – bietet generische Klassen, die für die Routenerstellung verwendet werden können,
-
es unterstützt WSGI, aber es wird nicht empfohlen – der Benutzer sollte stattdessen Tornados eigene Schnittstellen verwenden,
-
Out-of-the-Box-Websockets-Unterstützung, Authentifizierung (z. über Google) und Sicherheitsfunktionen (wie Cookie-Signierung oder XSRF-Schutz),
-
Für die Erstellung der REST-API sind keine zusätzlichen Tools erforderlich.
Das Framework sollte in Fällen gut funktionieren, in denen viele eingehende Verbindungen vorhanden sind, die schnell oder in Echtzeitlösungen verarbeitet werden können, z. B. Chats.
Tornado versucht, das c10k Problem zu lösen, so hohe Verarbeitungsgeschwindigkeit ist eine Priorität.
Ein weiterer Vorteil von Tornado ist die native Unterstützung für soziale Dienste. Dieses Framework ist keine gute Wahl für die Erstellung von Standard-CRUD-Sites oder großen Geschäftsanwendungen, da es nicht für diese Verwendung entwickelt wurde. Für größere Projekte kann es als Teil ihrer größeren Struktur in WSGI-Anwendungen integriert werden und Aufgaben erledigen, die hohe Bearbeitungsgeschwindigkeiten erfordern.
16.768 Github-Sterne / 3.263 StackOverflow-Fragen
Zusammenfassung
Die oben vorgestellten Web-Frameworks sind nur ein kleiner Teil einer größeren und breiteren Familie von Python-Frameworks.
Jede Lösung hat ihre Stärken und Schwächen und wie bei allem anderen gibt es keine perfekte Übereinstimmung, die jede gegebene Aufgabe löst.
Die wichtigsten Fragen, die man bei der Auswahl des Frameworks beantworten muss, werden von Problemen diktiert, die gelöst werden müssen.
- Wenn umfangreiche Unterstützung auf der Server- und Browserseite erforderlich ist, könnte ein Full-Stack-Framework eine gute Wahl sein.
- Für kleinere Projekte oder wo die Flexibilität beim Schreiben von Code eine Priorität ist, kann ein Microframework der richtige Weg sein.
- In Fällen, in denen die Geschwindigkeit der Anforderungsverarbeitung eine wichtige Rolle spielt oder ein Projekt mit langen Antwortzeiten zu kämpfen hat, sollte das asynchrone Framework den Trick machen.