I framework Python possono essere suddivisi in alcune aree poiché Python è un linguaggio molto vario e può essere utilizzato in vari campi. Ognuno di questi campi ha i propri framework, alcuni dei quali sono più popolari di altri. Uno dei campi più popolari in cui Python viene applicato è lo sviluppo web, su cui ci concentreremo oggi.
I framework presentati possono essere suddivisi in tre categorie: full stack frameworks, che offrono molte funzionalità pronte all’uso per il lato server e client; microframeworks, che offrono supporto lato server (a volte possono essere estesi al lato client) e consentono di creare un’applicazione Web semplicemente utilizzando un singolo file Python; e, infine, framework asincroni, che gestiscono le richieste in modo asincrono.
Framework web full-stack
Django
Django è uno dei framework Python più popolari. Offre un sacco di funzionalità out-of-the-box come Pannello di amministrazione o viste generiche e forme. Le caratteristiche principali di Django sono:
-
uno script di gestione (“manage.py”) che può essere utilizzato per eseguire la maggior parte delle azioni specifiche del framework (come avviare il server di sviluppo, creare un utente amministratore, raccogliere file statici ecc.),
-
richiesta sincrona di elaborazione,
-
MTV (modello-modello-vista) architettura pattern (che è la variazione di model-view-controller pattern),
-
custom object-relational mapping (ORM) per la comunicazione con il database,
-
utilizzo di funzioni e classi di vista di creazione del contesto e l’azione di movimentazione,
-
Django è rigorosa e forze proprio stile di codifica dello sviluppatore – un sacco di meta di programmazione,
-
molto buona, ampia documentazione con esempi,
-
HTML personalizzato modelli di rendering motore,
-
sistema di routing URL personalizzato,
-
conformità allo standard WSGI,
-
supporto per file statici – routing URL così come rilevamento e raccolta,
-
un gran numero di moduli esterni, ad esempio Django REST Framework, Django CMS, Django Channels (websockets).
Django è adatto per progetti più grandi, dove è richiesto un ampio supporto back-end e front-end o nei casi in cui il tempo gioca un ruolo cruciale, poiché Django offre un gran numero di componenti pronti. La codifica in Django si basa principalmente sulla personalizzazione di parti generiche di codice. Lo sviluppatore deve seguire una serie di regole che vengono con dato elemento. Per i progetti in cui si desidera molta flessibilità del codice, Django potrebbe non essere la scelta migliore.
37,514 Github stars / 183,588 Domande StackOverflow
Web2py
Web2py si concentra sulla sicurezza, velocità di sviluppo e facilità d’uso. Offre un sacco di caratteristiche fuori dalla scatola: un server web, database, pannello di amministrazione, wiki o griglia widget. Quadro caratteristiche principali sono:
-
richiesta sincrona di elaborazione,
-
custom Database Abstraction Layer (DAL) che agisce come ORM,
-
le forze di MVC struttura,
-
le funzioni e le classi possono essere utilizzati per la creazione di Controller,
-
severi “Ci dovrebbe essere un solo modo di fare le cose” filosofia,
-
una ricca documentazione con un sacco di esempi,
-
HTML personalizzato del motore che permette di codice Python per essere utilizzato nei modelli,
-
routing personalizzate – URL funzione che genera percorsi interni per le azioni e i file statici,
-
supporto per lo standard WSGI, ma è possibile utilizzare CGI (Common Gateway Interface), FastCGI, GAE (Google App Engine) o altro,
-
offre routing e streaming di file statici durante lo sviluppo,
-
ha servizi REST integrati ma richiede il framework Tornado per l’utilizzo del socket Web.
Web2py è stato molto ispirato da Ruby on Rails e Django frameworks e prende ciò che è il meglio da entrambi.
Può essere una buona scelta per i programmatori che vogliono migrare da Ruby o per quelli che sono annoiati con Django ma sono alla ricerca di un altro framework grande e ricco di funzionalità.
Offre un’app “admin”, che funge da IDE basato sul Web per lo sviluppo e la gestione di applicazioni (ad esempio creazioni di app, editor di codice). È anche supportato da PyCharm.
In generale, Web2Py non manca di funzionalità che Django ha. Questi due quadri possono essere utilizzati per svolgere gli stessi compiti. Web2Py è più giovane e ha una comunità più piccola di Django, quindi potrebbe essere un po ‘ più difficile trovare aiuto in caso di problemi.
1,665 GitHub stars/2,004 StackOverflow questions
TurboGears
TurboGears collega molti servizi esterni per creare un framework funzionale:
-
richiesta sincrona di elaborazione,
-
model-view-controller (MVC),
-
utilizza SQLAlchemy ORM,
-
permette l’utilizzo di funzioni e classe di vista generazione del contesto,
-
offre alcune pronto per l’uso di classi generiche (molto interessante APIController per il RESTO la creazione di API),
-
la documentazione è un po ‘ caotica, ma può essere una questione di abituarsi ad esso,
-
utilizza il Kajiki modello di lingua,
-
l’URL personalizzato di routing/spedizione metodi,
-
compatibile con WSGI standard,
-
supporta file statici configurazioni di percorso
-
può essere esteso con moduli aggiuntivi, ad esempio Circus e Chaussette per il supporto Web Sockets.
Il framework non è così popolare come i suoi due predecessori, ma vale comunque la pena di verificarlo.
259 GitHub stars / 107 Domande StackOverflow
Microframeworks
Flask
È uno dei microframeworks Python più popolari, è affidabile e veloce. Si dice che sia stato creato come uno scherzo. Le caratteristiche principali del framework sono:
-
supporto alla richiesta sincrona,
-
non forza alcuna architettura di progetto, ma ha alcune raccomandazioni (pacchetto, modulo, blueprints),
-
non offre ORM, ma SQLAlchemy o altro può essere usato,
-
supporta funzioni e alcune viste di classe generiche simili a Django (a partire da Flask 0.7),
-
sciolto stile di codifica, non forza alcuna soluzioni, la maggior parte delle decisioni sono lasciate alla discrezione dello sviluppatore,
-
buona documentazione con esempi,
-
è possibile utilizzare Jinja2 HTML Template engine,
-
Werkzeug sistema di routing,
-
compatibile con lo standard WSGI,
-
supporta le funzionalità di base di file statici di routing,
-
può essere esteso con ulteriori moduli di terze parti, ad esempio in Pallone-Riposante per il RESTO la creazione di API o di pallone-socketio per Socket Web di Supporto.
Questo framework farà il trucco in progetti di piccole e medie dimensioni. Ha alcuni moduli di terze parti che sono pronti per essere utilizzati e buone soluzioni native.
Flask dovrebbe dimostrarsi nei lavori in cui sono richieste complicate funzionalità personalizzate, ma Django sembra troppo grande per l’attività. D’altra parte, impostare Flask per un progetto più grande fin dall’inizio può essere complicato in quanto non esiste un modo “ufficiale” di farlo.
39.946 Stelle Github / 24.512 Domande StackOverflow
Pyramid
Pyramid inizia con un’installazione minima che può essere estesa quando necessario. Vale la pena notare che fa parte del progetto Pylons, che integra tecnologie legate al web.
Queste sono alcune delle caratteristiche più importanti della Piramide:
-
offre una richiesta sincrona di elaborazione,
-
vista contesti può essere definito con le funzioni, così come le classi,
-
non c’è un ORM, ma SQLAlchemy è raccomandato,
-
non forzare qualsiasi stile di codifica o di un progetto di architettura – TIMTOWTDI,
-
offre una buona documentazione con esercitazioni ed esempi,
-
specifiche HTML template engine è consegnato, ma il Camaleonte è raccomandato,
-
un interessante personalizzato sistema di routing permette di viste multiple corrispondenti a un URL,
-
e ‘ WSGI conforme,
-
supporto per file statici estesi – i file che servono, il routing URL per file statici,
-
possono essere estesi con moduli esterni, ad esempio Cornice per API REST, aiopyramid con supporto asincrono.
Questo framework potrebbe essere una buona scelta nei casi in cui non si desidera dedicare tempo all’apprendimento di soluzioni di framework personalizzati (come ORM) ma è comunque necessario uno strumento completo per la creazione di software, poiché Pyramid supporta l’utilizzo di molte ben note soluzioni stand-alone.
Ha buone capacità di ridimensionamento – si pubblicizza come un framework che può “iniziare in piccolo e finire in grande”.
2.974 Domande GitHub/2.060 Domande StackOverflow
CherryPy
Consente la creazione di applicazioni web nello stesso modo del progetto Python orientato agli oggetti. Non ha funzionalità full-stack e non forza alcuna soluzione specifica – lo sviluppatore può decidere come risolvere i problemi che si verificano durante lo sviluppo. Le caratteristiche di CherryPy sono:
-
offre una richiesta sincrona supporto,
-
non forza alcuna struttura di progetto o di architettura,
-
non fornire alcun ORM, ma SQLAlchemy o SQLObject può essere utilizzato,
-
non offre particolari HTML template engine,
-
ha sciolto stile di codifica,
-
offre decente documentazione,
-
il sistema di routing percorsi (Python versione di Rails sistema di routing) può essere utilizzato,
-
è compatibile con WSGI,
-
ha un buon supporto per i file statici – permette di servire i file o l’intero file directory,
-
consente la creazione di API REST solo con strumenti integrati,
-
facilita l’uso di Web Socket tramite il modulo ws4py.
Il vantaggio principale di CherryPy è che viene fornito con un server WSGI pronto per la produzione, che elimina la necessità di configurare un server esterno durante la distribuzione.
Lo svantaggio principale di questo framework è che non è molto popolare, quindi ha un numero minore di moduli esterni e una comunità meno vivace.
829 GitHub stars/1,244 StackOverflow domande
BottlePy
È ancora un altro microframework che si pubblicizza come veloce e semplice. Vale la pena notare che BottlePy viene consegnato come un singolo modulo senza dipendenze aggiuntive. Caratteristica:
-
implementa la gestione sincrona delle richieste,
-
offre un motore HTML personalizzato ma potrebbero essere utilizzati altri motori come Mako, Jinja2 o Cheetah,
-
non fornisce ORM ma è possibile utilizzare soluzioni esterne, ad esempio SQLAlchemy o Macaron,
-
non forzare il progetto di architettura,
-
dispone di sufficiente documentazione,
-
è una consuetudine sistema di routing, ma Werkzeug sistema di routing può essere utilizzato (via bottiglia-werkzeug),
-
implementa standard WSGI,
-
offre statico file di routing,
-
offre greenlets (con gevent) come richiesta asincrona soluzione per la movimentazione,
-
è possibile creare API REST senza moduli esterni – supporta JSON dati del cliente.
Grazie alle sue piccole dimensioni (solo un file) e nessuna dipendenza esterna (solo libreria standard Python) richiesta, può essere una buona scelta per i principianti che vogliono iniziare a imparare lo sviluppo web.
Potrebbe anche fare un buon lavoro con siti molto piccoli o test usa e getta. BottlePy non sarà la scelta migliore per progetti di medie o grandi dimensioni, in quanto richiederebbe un po ‘ di lavoro per arrivare al punto in cui iniziano i framework più pesanti.
5.795 GitHub stars / 1.288 Domande StackOverflow
Framework asincroni
Aiohttp
È un framework Python asincrono esteso. Offre un server con middleware, segnali, arresti graziosi e molti altri:
-
gestione richiesta asincrona, il client e il server websockets,
-
è possibile utilizzare GINO async ORM,
-
funzione di sostegni e di classe, a vista,
-
una documentazione sufficiente, ma un po ‘ difficile da navigare,
-
è possibile utilizzare puro SQLAlchemy, ma GINO come un async wrapper è raccomandato,
-
supporta Postgres, MySQL, Redis async driver,
-
non out-of-the-box motore di template, ma Jinja2 o Mako potrebbe essere applicato,
-
personalizzato sistema di routing,
-
non WSGI supporto,
-
supporta il routing per i file statici,
-
molti moduli di terze parti che possono estendere ulteriormente il framework, ad esempio aiohttp-apispec per la creazione di API REST, aiohttp-security per le autenticazioni e le autorizzazioni degli utenti.
Poiché offre molte funzionalità pronte all’uso (ad esempio supporto per lati client e server, websocket, middleware, segnali), Aiohttp potrebbe essere utilizzato con progetti di medie dimensioni (o anche con quelli più grandi).
6,378 Github stars / 503 Domande StackOverflow
Sanic
Sanic è un framework molto simile a flask: è piccolo, liberale e lascia molto spazio allo sviluppatore. La sua caratteristica principale è la sua velocità.
Ecco alcune altre caratteristiche:
-
supporto per async richiesta del gestore,
-
non offre alcun database di interfacce, ma GINO async ORM può essere installato,
-
dispone di funzione e di classe come l’origine di vista il contesto,
-
stile di codifica è piuttosto sciolto, molto simile a Pallone,
-
la documentazione consegnata con “readthedocs”,
-
Jinja2 HTML motore di template può essere utilizzato,
-
custom made sistema di routing,
-
non è WSGI compatibile per impostazione predefinita, ma un modulo di terze parti (sanic-dispatcher) può essere installato per il supporto,
-
base routing file statico,
-
può essere esteso con moduli aggiuntivi, ad esempio Sanic CRUD per la creazione di API REST.
Dovrebbe essere una buona decisione scegliere Sanic quando hai già avuto qualche esperienza con Flask, poiché questi due framework hanno molto in comune.
Sanic offre la gestione della configurazione predefinita, mentre in aiohttp menzionato prima, l’utente deve farlo da solo. Ha alcuni interessanti moduli di terze parti come un limitatore di velocità di richiesta o un’integrazione GraphQL.
10,625 Github stars/58 StackOverflow questions
Tornado
Tornado è un framework Web Python e una libreria di rete asincrona, originariamente sviluppata presso FriendFeed (un sito di aggregazione sociale). Grazie a ciò, offre un’integrazione integrata con servizi sociali come Google, Facebook e Twitter.
L’integrazione con altri framework e librerie è anche possibile: Twisted, asyncio o anche applicazioni WSGI. Caratteristiche di Tornado:
-
offre molte classi generiche che possono essere utilizzate per creare l’applicazione, ad esempio Router, o SocketHandler per websockets,
-
HTML personalizzato modello di motore,
-
chiara e di facile lettura, documentazione,
-
le funzioni e le classi possono essere utilizzati per la definizione di azioni e la gestione di richieste,
-
personalizzato di routing gestione – offerte di classi generiche che possono essere utilizzati per la creazione di un percorso,
-
supporta WSGI, ma non è consigliato – l’utente dovrebbe utilizzare di Tornado proprie interfacce, invece,
-
out-of-the-box websockets supporto, autenticazione (ad es. tramite Google) e funzionalità di sicurezza (come la firma dei cookie o la protezione XSRF),
-
non sono necessari strumenti aggiuntivi per la creazione di API REST.
Il framework dovrebbe funzionare bene nei casi in cui ci sono molte connessioni in entrata che possono essere gestite rapidamente o in soluzioni in tempo reale, ad esempio chat.
Tornado cerca di risolvere il problema c10k così alta velocità di elaborazione è una priorità.
Un altro vantaggio di Tornado è il suo supporto nativo per i servizi sociali. Questo framework non sarà una buona scelta per la creazione di siti CRUD standard o applicazioni di grandi imprese, in quanto non è stato progettato per essere utilizzato in questo modo. Per progetti più grandi, può essere integrato con le applicazioni WSGI come parte della loro struttura più grande e prendersi cura di attività che richiedono elevate velocità di movimentazione.
16,768 Github stars/3,263 StackOverflow questions
Sommario
I framework Web presentati sopra sono solo un piccolo pezzo di una famiglia più ampia e più ampia di framework Python.
Ogni soluzione ha i suoi punti forti e deboli e, come per tutto il resto, non esiste una corrispondenza perfetta che risolva ogni dato compito.
Le domande più importanti a cui si deve rispondere quando si sceglie il framework sono dettate da problemi che devono essere risolti.
- Se è richiesto un ampio supporto sul lato server e browser, allora un framework full-stack potrebbe essere una buona scelta.
- Per progetti più piccoli o dove la flessibilità nella scrittura del codice è una priorità, un microframework può essere la strada da percorrere.
- Nei casi in cui la velocità di elaborazione delle richieste gioca un ruolo importante o un progetto dovrà affrontare tempi di risposta lunghi, il framework asincrono dovrebbe fare il trucco.