5 grandi e potenti framework web Python

Quando crei un back-end per un sito Web o un servizio, anche uno che a prima vista sembra modesto, potresti scoprire rapidamente che è tutt'altro. Anche un sito “semplice” risulta essere un alveare di complessità. La gestione degli utenti, la progettazione dei dati, l'invio di moduli, la sicurezza, l'implementazione manuale di tutto ciò diventa noioso.

Per quei grandi progetti web, quando sai che avrai bisogno di tutto oltre al lavello della cucina, è meglio rivolgersi a un framework fornito con batterie (e caricabatterie) inclusi. Ecco cinque framework web pesanti per Python che vengono forniti con tutto il necessario per creare applicazioni web robuste e altro ancora.

CubicWeb

CubicWeb è classificato come "un framework per applicazioni web semantiche che favorisce il riutilizzo e la progettazione orientata agli oggetti". È un sistema intrigante, come notato da Rick Grehan quando lo ha recensito nel 2011, che enfatizza l'uso di astrazioni e blocchi di codice riutilizzabili chiamati "cubi". In effetti, CubicWeb potrebbe essere troppo astratto o idiosincratico per alcuni sviluppatori e la sua velocità di sviluppo e il set di funzionalità sono in ritardo rispetto ad altri framework.

I cubi sono componenti software che presentano uno schema (modello di dati), entità (logica di programmazione) e viste. Assemblando più cubi, ognuno dei quali esegue la propria attività, è possibile comporre applicazioni software riutilizzando il proprio codice e il codice di altri.

Al suo interno, CubicWeb fornisce lo scaffolding di base utilizzato da ogni app web: un "repository" per le connessioni dati e l'archiviazione; un "motore web" per richieste / risposte HTTP di base e azioni CRUD; e uno schema per la modellazione dei dati. Tutto questo è descritto nelle definizioni delle classi Python.

Per configurare e gestire istanze di CubicWeb, lavori con uno strumento da riga di comando simile a quello utilizzato per Django. Un sistema di creazione dei modelli integrato consente di generare a livello di codice output HTML. È inoltre possibile utilizzare un cubo che fornisce strumenti per le interfacce utente Web, come quello per il framework HTML Bootstrap.

Sebbene CubicWeb supporti Python 3 (dalla versione 3.23), non sembra utilizzare la funzionalità asincrona nativa di Python 3. Un modo indiretto per includere l'asincronia potrebbe essere quello di utilizzare il modulo cubicweb.pyramid per utilizzare il framework Pyramid come server web e disegnare su un fork di Pyramid che utilizza costruzioni asincrone. È anche possibile eseguire attività in modo asincrono con il cubo cubicweb-worker. Ma niente di più semplice sembra fuori portata per ora.

Per recuperare o manipolare dati persistenti in un'app CubicWeb, si utilizza Relation Query Language (RQL), che utilizza una sintassi vagamente simile a SQL ma è modellato sullo SparQL del W3C. La giustificazione di CubicWeb per questo è, ancora una volta, l'astrazione: RQL fornisce un percorso altamente disaccoppiato per correlare varie fonti di dati.

Poiché CubicWeb ha molte dipendenze, è meglio usarle pip installper recuperarle tutte. Potrebbe anche essere necessario eseguire una certa quantità di modifiche manuali sull'ambiente locale. Ciò è in contrasto con altri framework in cui pip installè sufficiente eseguire o rilasciare il codice del framework in una sottocartella di un altro progetto. Oppure potresti usare un container Docker per far funzionare le cose.

CubicWeb si riferisce alla sua lunga documentazione come "il libro". Gli autori del libro si sono presi il tempo per spiegare l'approccio insolito di CubicWeb, dimostrare come costruire alcune applicazioni di base, includere riferimenti API e in generale si fanno in quattro per essere specifici.

CubicWeb rimane in fase di sviluppo attivo, anche se lento. I piani per CubicWeb 4.0 sono stati rimuginati dal 2012, ma non è stata ancora offerta alcuna tempistica per la consegna.

Django

Nel decennio e nel cambiamento dalla prima apparizione di Django, è diventato uno dei framework più utilizzati da Python per la creazione di applicazioni web. Django viene fornito con quasi tutte le batterie di cui potresti aver bisogno, rendendolo più adatto per la creazione di grandi applicazioni rispetto a quelle piccole.

Django ha trascorso molti anni seduto alla versione 1.x. Quando Django 2.0 è arrivato alla fine del 2017, ha abbandonato la compatibilità con Python 2 a favore di Python 3.4 e versioni successive. Django 3.0, rilasciato a dicembre 2019, richiede Python 3.6 o superiore e aggiunge il supporto per il nuovo standard ASGI asincrono per le applicazioni web Python.

Una parte fondamentale dell'attrattiva di Django è la velocità di distribuzione. Poiché Django include così tanti pezzi di cui hai bisogno per sviluppare un'applicazione web media, puoi muoverti rapidamente. Routing, analisi dell'URL, connettività del database incluso un ORM (mappatore relazionale a oggetti), convalida dei moduli, protezioni dagli attacchi e modelli sono tutti integrati.

Troverai elementi costitutivi per gli scenari di applicazioni Web più comuni. La gestione degli utenti, ad esempio, si trova sulla maggior parte dei siti Web, quindi Django la offre come elemento standard. Invece di dover creare il proprio sistema per tracciare account utente, sessioni, password, accessi / disconnessioni, autorizzazioni di amministratore e così via, Django fornisce queste funzionalità in modo nativo. Possono essere utilizzati così come sono o estesi per comprendere nuovi casi d'uso con un lavoro minimo.

Django ha impostazioni predefinite sane e sicure che aiutano a proteggere la tua applicazione web dagli attacchi. Quando si inserisce una variabile in un modello di pagina, ad esempio una stringa con HTML o JavaScript, il contenuto non viene visualizzato letteralmente a meno che non si designi esplicitamente l'istanza della variabile come sicura. Questo di per sé elimina molti problemi comuni di cross-site scripting. Se desideri eseguire la convalida del modulo, puoi utilizzare qualsiasi cosa, dalla semplice protezione CSRF ai meccanismi di convalida campo per campo completi che restituiscono un feedback dettagliato degli errori.

Un set di funzionalità così ricco e ampio come quello di Django non sarebbe molto buono senza una robusta documentazione che lo accompagni. La documentazione di Django approfondisce ogni aspetto del framework da più angolazioni. Lavorare con Python 3 o altri tipi di linguaggio, eseguire correttamente la sicurezza, implementare componenti di applicazioni Web comuni (come sessioni o impaginazione), generare sitemap: sono tutti coperti. Anche le API per ogni livello dell'applicazione (modello, vista e modello) sono descritte in dettaglio.

Con un grande potere, tuttavia, arriva una grande complessità. Le applicazioni Django hanno la reputazione di essere molto pesanti, piene di molte parti mobili. Anche una semplice app Django richiede una discreta quantità di configurazione per funzionare. Se il tuo obiettivo è fare poco più che impostare un paio di semplici endpoint REST, Django è quasi certamente eccessivo.

Anche Django ha le sue stranezze. Ad esempio, i modelli di pagina non possono utilizzare invocabili. Esempio: puoi passare {{user.name}}come componente in un modello, ma non {{user.get_name()}}. È uno dei modi in cui Django garantisce che i modelli non ti sparino inavvertitamente ai piedi, ma questi vincoli possono essere fastidiosi se non sei preparato per loro. Sebbene ci siano soluzioni alternative, tendono a incidere sulle prestazioni.

A partire dalla versione 3.0, Django ha aggiunto il supporto per le visualizzazioni asincrone. Sfortunatamente, non c'è ancora il supporto per async in altre parti dello stack Django, come l'ORM. Ma puoi distribuire Django usando ASGI per sfruttare appieno le viste asincrone.

Web2py

Nel mondo della programmazione Ruby, Ruby on Rails è il framework web de facto. Massimo Di Pierro, professore di informatica della DePaul University, si è ispirato a Rails per creare un framework web in Python che fosse altrettanto facile da configurare e utilizzare. Il risultato è Web2py.

La più grande attrazione di Web2py è il suo ambiente di sviluppo integrato. Quando configuri un'istanza di Web2py, ti viene fornita un'interfaccia web, essenzialmente un editor di applicazioni Python online, dove puoi configurare i componenti dell'app. Questo in genere significa creare modelli, viste e controller, ciascuno descritto tramite moduli Python o modelli HTML. Alcune app di esempio vengono fornite con Web2py immediatamente. Puoi smontarli per vedere come funzionano o sfruttarli come modelli iniziali per creare le tue app.

Gli sviluppatori in genere distribuiscono Web2py scaricando il suo codice sorgente e costruendo su quello. Ma per gli utenti meno tecnici su Windows o MacOS, i creatori di Web2py offrono versioni che sono essenzialmente server indipendenti. Scarica, scompatta ed esegui una di queste versioni e avrai un server web locale con una copia preconfigurata di Web2py integrata. Questo è un bel modo per ottenere un vantaggio sulla creazione di un'app Web2py, che può quindi essere distribuita altrove se necessario.

L'interfaccia web di Web2py è stata costruita con Bootstrap 4, quindi è facile per gli occhi e facile da navigare. L'editor in-browser non sostituisce un IDE completo, ma è dotato di utili aiuti come la numerazione delle righe e l'evidenziazione della sintassi Python (incluso il rientro automatico). È inclusa anche una rapida interfaccia web alla shell Python, così puoi interagire con Web2py dalla riga di comando, una bella concessione per gli esperti.

Il sistema di astrazione dei dati utilizzato in Web2py funziona in modo leggermente diverso dall'ORM di Django e da altri ORM ad esso ispirati (come Peewee). Questi sistemi utilizzano classi Python per definire i modelli, mentre Web2py utilizza funzioni di costruzione come define_tableistanziare i modelli. È probabile che le differenze siano stridenti solo se sei abituato all'altro modo; non dovrebbero turbare i nuovi arrivati. È improbabile che tu abbia problemi con l'autostop Web2py a un fornitore di dati, poiché parla con quasi tutti i principali database esistenti.

Una funzione relativa al database veramente utile in Web2py è la capacità di generare un diagramma dei modelli, permettendoti di visualizzare come i tuoi modelli si relazionano tra loro. Tuttavia, dovrai installare la libreria PyGraphviz per abilitare quella funzione.

Web2py fornisce molti altri componenti di livello professionale: funzioni di internazionalizzazione, più metodi di memorizzazione nella cache, controllo degli accessi e autorizzazione e persino effetti front-end (ad esempio, un selettore di date nei moduli) tramite il supporto integrato per jQuery e AJAX. Sono inclusi anche ganci per middleware esterno e interno, sebbene non sia consentito utilizzare il middleware per sostituire le funzioni principali di Web2py. Tuttavia, non esiste ancora un uso esplicito della funzionalità asincrona di Python in Web2py, sebbene esista uno scheduler per la gestione delle attività a lunga esecuzione. 

Non c'è da meravigliarsi che la documentazione di Web2py venga chiamata "il libro". Innanzitutto, copre un'incredibile quantità di materiale su Web2py, Python e gli ambienti di distribuzione utilizzati per entrambi. Secondo, è scritto in uno stile narrativo altamente accessibile. In terzo luogo, parla in modo approfondito degli scenari comuni di creazione di applicazioni. C'è un intero capitolo, ad esempio, sull'uso di jQuery per creare applicazioni AJAX.

Weppy

Weppy si sente a metà strada tra la semplicità minima di Flask e la completezza di Django. Mentre lo sviluppo di un'app Weppy ha la semplicità di Flash, Weppy viene fornito con molte funzionalità presenti in Django, come i livelli di dati e l'autenticazione. Pertanto, Weppy è adatto alle app che vanno da estremamente semplici a modestamente sofisticate.

A prima vista, il codice Weppy assomiglia molto al codice Flask o al codice Bottle. Sono necessarie poche istruzioni per ottenere un sito Web di base a percorso singolo attivo e funzionante. I percorsi possono essere descritti tramite decoratori di funzioni (il modo più semplice) o programmaticamente, e la sintassi per farlo è strettamente correlata a Flask / Bottle. I modelli funzionano più o meno allo stesso modo, a parte piccole variazioni di sintassi.

Weppy contrasta con quei framework più piccoli includendo alcune funzionalità che incorporano solo come plug-in o componenti aggiuntivi. Ad esempio, né Flask né Bottle hanno un ORM integrato o un sistema di gestione dei dati. Weppy include un ORM, sebbene basato sul progetto pyDAL piuttosto che sul ben più popolare SQLAlchemy. Weppy supporta anche le migrazioni di schemi, che Django supporta come parte del suo ORM (il sistema di migrazione di Django è anche molto più automatizzato). Sebbene Weppy abbia un meccanismo di estensione, l'elenco dei componenti aggiuntivi ufficialmente approvati è minuscolo, molto più piccolo del catalogo di estensioni per Flask.

Framework più leggeri come Weppy vengono spesso utilizzati per creare API RESTful e Weppy è dotato di funzioni utili a tale scopo. Metti un @servicedecoratore su un percorso e i dati che restituisci vengono formattati automaticamente nella tua scelta di JSON o XML.

Weppy include altre funzionalità che sembrano più in linea con un framework più ampio, ma vengono implementate senza ingombro. Gli esempi includono meccanismi di convalida dei dati, gestione dei moduli, memorizzazione nella cache delle risposte e convalida dell'utente. In tutti questi casi, Weppy adotta un approccio "appena sufficiente". Le funzionalità fornite non sono complete come potresti trovare in Django e altri framework pesanti, ma uno sviluppatore non ha bisogno di investire molto lavoro per renderle utili e possono sempre essere estese dopo il fatto.

Un'altra caratteristica del framework dei pesi massimi che si trova in Weppy è il supporto all'internazionalizzazione. Le stringhe nei modelli possono essere tradotte in base ai file locali forniti con l'applicazione, che sono semplici dizionari Python. La scelta della lingua può essere impostata anche analizzando la richiesta del browser (ovvero, l'intestazione HTTP Accept-Language) o associando una traduzione a un percorso specifico.

La documentazione di Weppy ha lo stesso sapore del framework stesso. È pulito, leggibile e scritto per essere consumato dagli esseri umani. A parte il solito esempio di "ciao mondo", include un bel tutorial dettagliato che ti consente di creare un sistema di microblogging come progetto iniziale.

I piani a lungo termine per Weppy includono il supporto di async e socket come entità di primo livello di basso livello. Gli sviluppatori di Weppy prevedono di introdurre queste funzionalità nella versione 2.0 e quindi di richiedere Python 3.7 o superiore per tutte le future versioni di Weppy.

Zope