Python frameworks kan worden onderverdeeld in een paar gebieden omdat Python een zeer diverse taal is en kan worden gebruikt in verschillende velden. Elk van deze velden heeft zijn eigen kaders, waarvan sommige populairder zijn dan andere. Een van de meest populaire velden Python wordt toegepast in is web development, die we zullen richten op vandaag.
de gepresenteerde frameworks kunnen worden onderverdeeld in drie categorieën: full stack frameworks, die veel out-of-the-box functies bieden voor de server en de client; microframeworks, die ondersteuning bieden aan de server-side (soms kunnen ze worden uitgebreid naar de client) en het mogelijk maken van een webtoepassing door slechts één Python-bestand te gebruiken; en, ten slotte, asynchrone frameworks, die Verzoeken asynchroon behandelen.
Full-stack web frameworks
Django
Django is een van de meest populaire Python frameworks. Het biedt veel out-of-the-box functionaliteiten zoals Admin Panel of generieke weergaven en formulieren. Django ‘ s belangrijkste kenmerken zijn:
-
one managing script (“manage.py”) die gebruikt kunnen worden voor het uitvoeren van de meeste framework specifieke acties (zoals het starten van de ontwikkelingsserver, het maken van een admin gebruiker, het verzamelen van statische bestanden etc.),
-
synchrone aanvraag verwerken,
-
MTV (model-sjabloon-view) architectuur patroon (dat is de wijziging van de model-view-controller patroon),
-
aangepaste object-relational mapping (ORM) voor de communicatie met de database,
-
het gebruik van functies en klassen voor het weergeven context creatie en actie hanteren,
-
Django is streng en dwingt de eigen codering van de stijl op de developer – een veel meta-programmeren,
-
zeer goede, uitgebreide documentatie met voorbeelden,
-
aangepaste HTML-sjablonen rendering engine,
-
aangepast URL-routeringssysteem,
-
naleving van de WSGI-standaard,
-
Ondersteuning voor statische bestanden-URL-Routering en detectie en verzameling,
-
een groot aantal externe modules, bijvoorbeeld Django REST Framework, Django CMS, Django kanalen (websockets).
Django past goed bij grotere projecten, waar uitgebreide backend en frontend ondersteuning vereist is of in gevallen waarin tijd een cruciale rol speelt, omdat Django een groot aantal kant-en-klare componenten biedt. Codering in Django is meestal gebaseerd op het aanpassen van generieke delen van code. De ontwikkelaar moet een reeks regels volgen die met een gegeven element worden geleverd. Voor projecten waar veel codeflexibiliteit gewenst is, is Django misschien niet de beste keuze.
37.514 Github stars / 183.588 StackOverflow questions
Web2py
Web2py richt zich op veiligheid, ontwikkelsnelheid en gebruiksgemak. Het biedt een heleboel functies uit de doos: een webserver, database, admin panel, wiki of grid widgets. Kader belangrijkste kenmerken zijn:
-
synchrone aanvraag verwerken,
-
aangepaste Database Abstraction Layer (DAL) die fungeert als ORM,
-
forceert een MVC structuur,
-
functies en klassen kan worden gebruikt voor het maken van Controllers,
-
strikte “Er moet één manier van dingen doen” filosofie,
-
uitgebreide documentatie met veel voorbeelden,
-
aangepaste HTML-engine die het mogelijk maakt Python code om gebruikt te worden in de sjablonen,
-
aangepaste routing – URL-functie genereert interne paden voor de handelingen en statische bestanden,
-
Ondersteuning voor de WSGI-standaard, maar het is mogelijk om CGI (Common Gateway Interface), FastCGI, GAE (Google App Engine) of andere te gebruiken,
-
biedt statische bestandsroutering en streaming tijdens de ontwikkeling,
-
heeft ingebouwde REST services maar vereist het Tornado framework voor Web Socket gebruik.
Web2py was zeer geà nspireerd door Ruby on Rails en Django frameworks en neemt het beste van beide.
Het kan een goede keuze zijn voor programmeurs die van Ruby willen migreren of voor degenen die zich vervelen met Django maar op zoek zijn naar een ander groot en veelzijdig framework.
Het biedt een “admin” app, die fungeert als een web-based IDE voor applicatie ontwikkeling en beheer (bijvoorbeeld app creaties, code editor). Het wordt ook ondersteund door PyCharm.
In het algemeen heeft Web2Py geen functionaliteiten die Django heeft. Deze twee kaders kunnen worden gebruikt om dezelfde taken te vervullen. Web2Py is jonger, en het heeft een kleinere gemeenschap dan Django, dus het kan een beetje moeilijker om hulp te vinden in geval van problemen.
1.665 GitHub stars / 2.004 StackOverflow questions
TurboGears
TurboGears verbindt veel externe services om één functioneel framework te creëren:
-
synchrone aanvraag verwerken,
-
model-view-controller (MVC) patroon,
-
toepassingen SQLAlchemy ORM,
-
staat voor het gebruik van functies en klasse context generatie,
-
het biedt een aantal kant-en-voor-gebruik van generieke klassen (zeer interessant APIController voor de REST API ‘ s),
-
documentatie is een beetje chaotisch, maar het is misschien een kwestie van wennen,
-
gebruik de Kajiki sjabloon taal,
-
aangepaste URL routing/verzending methodes,
-
compatibel met de WSGI standaard,
-
ondersteunt statische bestanden pad configuraties
-
kan worden uitgebreid met extra modules, bijvoorbeeld Circus en Chaussette voor Web Sockets ondersteuning.
het framework is niet zo populair als zijn twee voorgangers, maar toch is het de moeite waard om te bekijken.
259 GitHub stars / 107 StackOverflow questions
Microframeworks
Flask
Het is een van de meest populaire Python microframeworks, het is betrouwbaar en snel. Er wordt gezegd dat het werd gemaakt als een grap. De belangrijkste kenmerken van het kader zijn::
-
synchrone aanvraagondersteuning,
-
dwingt geen projectarchitectuur af, maar heeft enkele aanbevelingen (pakket, module, blauwdrukken),
-
Het biedt geen ORM aan, maar SQLAlchemy of andere kunnen worden gebruikt,
-
ondersteunt functies en enkele Django-achtige generieke class-weergaven (beginnend met kolf 0.7),
-
los de codering van stijl, niet zijnde oplossingen, de meeste beslissingen worden overgelaten aan de ontwikkelaar inzicht,
-
een goede documentatie met voorbeelden
-
het is mogelijk om gebruik te maken Jinja2 HTML-Template-engine,
-
Werkzeug routing system,
-
compatibel met de WSGI standaard,
-
basic ondersteunt statisch bestand routing,
-
kan worden uitgebreid met een aantal aanvullende derde-partij-modules, zoals b.v. Kolf-Rustgevend voor de REST API creatie of kolf-socketio voor Web Sockets Ondersteunen.
dit raamwerk zal het lukken in kleine en middelgrote projecten. Het heeft een aantal modules van derden die klaar zijn om te worden gebruikt, evenals goede native oplossingen.
Flask zou zichzelf moeten bewijzen in taken waar ingewikkelde aangepaste functies vereist zijn, maar Django lijkt te groot voor de taak. Aan de andere kant, het instellen van kolf voor een groter project vanaf het begin kan lastig zijn als er geen “officiële” manier om dit te doen.
39.946 GitHub stars / 24.512 StackOverflow questions
Pyramid
Pyramid begint met een minimale installatie die kan worden uitgebreid indien nodig. Het is vermeldenswaard dat het een deel van de Pylons project, dat WEB-gerelateerde technologieën integreert.
Dit zijn enkele van de belangrijkste kenmerken van Piramide:
-
biedt synchrone aanvraag verwerken,
-
uitzicht contexten kunnen worden gedefinieerd met functies en klassen,
-
er is geen specifieke ORM maar SQLAlchemy is aanbevolen,
-
je hoeft niet te dwingen een codering stijl of project architectuur – TIMTOWTDI,
-
biedt een goede documentatie met tutorials en voorbeelden
-
geen specifieke HTML-template engine is geleverd, maar Chameleon is aanbevolen,
-
een interessante aangepaste routing systeem kunt u meerdere weergaven om één URL,
-
het is WSGI compliant,
-
uitgebreide ondersteuning voor statische bestanden-files serving, URL routing voor statische bestanden,
-
kan worden uitgebreid met externe modules, bijvoorbeeld Cornice for REST API ‘ s, aiopyramid met async-ondersteuning.
dit framework kan een goede keuze zijn in gevallen waarin u geen tijd wilt besteden aan het leren van aangepaste frameworks-oplossingen (zoals ORM), maar nog steeds een uitgebreide tool nodig hebt voor het bouwen van software, omdat Pyramid het gebruik van veel bekende stand-alone oplossingen ondersteunt.
Het heeft goede scaling mogelijkheden-adverteert zichzelf als een framework dat “klein kan beginnen en groot kan eindigen”.
2,974 GitHub questions/2,060 StackOverflow questions
CherryPy
maakt het mogelijk om webapplicatie te maken op dezelfde manier als object-georiënteerd Python project. Het heeft geen full-stack functionaliteiten en dwingt geen specifieke oplossingen-de ontwikkelaar kan beslissen hoe problemen die zich voordoen tijdens de ontwikkeling op te lossen. CherryPy ‘ s functies zijn:
-
biedt synchrone verzoek ondersteuning
-
je hoeft niet te dwingen een project structuur of architectuur,
-
je hoeft niet te leveren ORM, maar SQLAlchemy of SQLObject gebruikt kan worden,
-
je hoeft het niet leveren van een HTML-template engine,
-
heeft een losse codering stijl
-
biedt fatsoenlijke documentatie,
-
de routing system routes (Python versie van Rails routing system) gebruikt kan worden,
-
is compatibel met WSGI,
-
heeft goede ondersteuning voor statische bestanden – laat het voor het serveren van bestanden of hele bestand mappen,
-
maakt het aanmaken van REST API ‘ s alleen met ingebouwde hulpmiddelen mogelijk,
-
vergemakkelijkt het gebruik van Web Sockets via de ws4py module.
Het belangrijkste voordeel van CherryPy is dat het wordt geleverd met een productie-ready WSGI-server, die de noodzaak van het opzetten van een externe server tijdens de implementatie verwijdert.
Het grootste nadeel van dit framework is dat het niet erg populair is, vandaar dat het een kleiner aantal externe modules heeft en een minder levendige gemeenschap.
829 GitHub stars/ 1,244 StackOverflow questions
BottlePy
Het is weer een ander microframework dat zichzelf adverteert als snel en eenvoudig. Het is vermeldenswaard dat BottlePy wordt geleverd als een enkele module zonder extra afhankelijkheden. Functie:
-
implementeert synchrone aanvraagafhandeling,
-
biedt aangepaste HTML-engine, maar andere motoren zoals Mako, Jinja2 of Cheetah kunnen worden gebruikt,
-
levert geen ORM, maar het is mogelijk om externe oplossingen te gebruiken, bijv. SQLAlchemy of Macaron,
-
je hoeft niet te dwingen een project architectuur,
-
biedt voldoende documentatie
-
is er een aangepaste routing systeem, maar Werkzeug routing systeem kan worden gebruikt (via de fles-werkzeug),
-
implementeert WSGI standaard
-
biedt eenvoudige statische bestand routing,
-
biedt greenlets (met gevent) als asynchrone afhandeling van aanvragen oplossing,
-
het is mogelijk te maken van REST API zonder externe modules – ondersteunt de JSON-gegevens van de opdrachtgever.
vanwege het kleine formaat (slechts één bestand) en geen externe afhankelijkheden (alleen Python standaardbibliotheek) vereist, kan het een goede keuze zijn voor beginners die webontwikkeling willen leren.
Het kan ook goed werk doen met zeer kleine locaties of wegwerptests. BottlePy zal niet de beste keuze zijn voor middelgrote of Grotere projecten, omdat het wat werk zou vereisen om tot het punt te komen waar zwaardere frameworks beginnen.
5,795 GitHub stars / 1,288 StackOverflow questions
asynchrone frameworks
Aiohttp
Het is een uitgebreid Async Python framework. Het biedt een server met middleware, signalen, sierlijke shutdowns en nog veel meer:
-
asynchrone afhandeling van aanvragen, de client en de server websockets,
-
het is mogelijk gebruik te maken van GINO async ORM,
-
ondersteunt de functie en klasse-gebaseerde uitzicht,
-
voldoende documentatie, maar een beetje moeilijk om te navigeren,
-
het is mogelijk gebruik te maken van pure SQLAlchemy, maar GINO als een asynchrone wrapper is aanbevolen,
-
ondersteunt Postgres, MySQL, Redis async-drivers,
-
geen out-of-the-box template engine, maar Jinja2 of Mako kon worden toegepast,
-
aangepaste routing system,
-
geen WSGI ondersteuning
-
ondersteunt routering voor statische bestanden,
-
veel modules van derden die het framework verder kunnen uitbreiden, bijvoorbeeld aiohttp-apispec voor het aanmaken van REST-API, aiohttp-security voor gebruikersverificatie en machtigingen.
omdat het veel mogelijkheden biedt (bijvoorbeeld ondersteuning voor client-en serverzijde, websockets, middleware, signalen), kan Aiohttp gebruikt worden met middelgrote projecten (of zelfs met grotere).
6,378 GitHub stars / 503 StackOverflow questions
Sanic
Sanic is een zeer kolfachtig framework: het is klein, liberaal en laat veel ruimte over voor de ontwikkelaar. Het belangrijkste kenmerk is de snelheid.
hier zijn enkele andere kenmerken:
-
ondersteuning voor asynchrone request handler,
-
je hoeft geen database interfaces, maar GINO async ORM kan worden geïnstalleerd,
-
biedt de functie en klasse in de bron van uitzicht context
-
codering stijl is vrij losse, vergelijkbaar met de Kolf,
-
documentatie geleverd met “readthedocs”,
-
Jinja2 HTML template engine gebruikt kan worden,
-
maat gemaakt routing system,
-
is niet WSGI voldoet standaard aan, maar een derde module (sanic-verdeler) kan worden geïnstalleerd om het te ondersteunen,
-
heeft basic statische bestandsroutering,
-
kan worden uitgebreid met extra modules, bijvoorbeeld Sanic CRUD for REST API creation.
Het zou een goede beslissing moeten zijn om Sanic te kiezen als je al enige ervaring hebt met Flask, omdat deze twee frameworks veel gemeen hebben.
Sanic biedt standaard configuratie afhandeling, terwijl in aiohttp eerder, de gebruiker nodig heeft om het te doen op hun eigen. Het heeft een aantal interessante modules van derden, zoals een verzoek rate limiter of een GraphQL integratie.
10,625 Github stars/58 StackOverflow questions
Tornado
Tornado is een Python web framework en asynchrone netwerkbibliotheek, oorspronkelijk ontwikkeld op FriendFeed (een sociale aggregatie site). Dankzij dat, het biedt een ingebouwde integratie met sociale diensten zoals Google, Facebook, en Twitter.
De integratie met andere frameworks en bibliotheken is ook mogelijk: Twisted, asyncio of zelfs WSGI toepassingen. Tornado ‘ s functies:
-
biedt veel generieke klassen die kunnen worden gebruikt voor het maken van de toepassing, bijv. Router, of SocketHandler voor websockets,
-
aangepaste HTML-template-engine,
-
duidelijk en gemakkelijk te lezen documentatie,
-
functies en klassen kan worden gebruikt voor het definiëren van acties en het behandelen van verzoeken,
-
aangepaste routing handling – biedt generieke klassen dan kan worden gebruikt om de route te creëren,
-
het ondersteunt WSGI, maar het is niet aan te raden – de gebruiker dient gebruik Tornado ‘ s eigen interface in plaats daarvan,
-
out-of-the-box websockets ondersteuning, authenticatie (bijv. via Google), en beveiligingsfuncties (zoals cookie signing of xsrf bescherming),
-
Er zijn geen extra tools nodig voor het aanmaken van REST API.
het framework zou goed moeten werken in gevallen waarin er veel binnenkomende verbindingen zijn die snel of in real-time oplossingen kunnen worden afgehandeld, bijvoorbeeld chats. Tornado probeert het c10k-probleem op te lossen, dus hoge verwerkingssnelheid is een prioriteit. een ander voordeel van Tornado is de ondersteuning van sociale diensten. Dit framework zal niet een goede keuze voor het creëren van standaard CRUD sites of big business applicaties, omdat het niet is ontworpen om te worden gebruikt op die manier. Voor grotere projecten kan het worden geïntegreerd met WSGI-toepassingen als onderdeel van hun grotere structuur en taken uitvoeren die hoge verwerkingssnelheden vereisen.
16.768 GitHub stars / 3.263 StackOverflow questions
Summary
de web frameworks hierboven gepresenteerd zijn slechts een klein deel van een grotere en bredere familie van Python frameworks.
elke oplossing heeft zijn sterke en zwakke punten en, zoals met al het andere, is er geen perfecte match die elke gegeven taak zal oplossen.
De belangrijkste vragen die men moet beantwoorden bij het kiezen van het raamwerk worden bepaald door problemen die moeten worden opgelost.
- als uitgebreide ondersteuning op de server – en browserzijde vereist is, dan is een full-stack framework misschien een goede keuze.
- voor kleinere projecten of waar de flexibiliteit bij het schrijven van code een prioriteit is, kan een microframework de weg zijn.
- in gevallen waarin de verwerkingssnelheid van aanvragen een belangrijke rol speelt of een project te maken zal krijgen met lange responstijden, zou asynchrone framework de truc moeten doen.