Il panorama di Python è popolato da una moltitudine di soluzioni per lo sviluppo web.
Django è sicuramente il framework più diffuso, anche grazie alla moltitudine di moduli già pronti che offre,
ma a volte può essere poco performante o macchinoso quando si ha l'esigenza di soluzioni
fortemente personalizzate.
Nel corso degli anni sono nati decine di web framework che hanno
cercato di offrire soluzioni più flessibili, performanti o efficaci di Django in specifici
casi d'uso. Tra questo, uno dei più interessanti è TurboGears, che sarà l'oggetto di questo approfondimento.
Introduzione
La semplicità, la rapidità, ma specialmente la qualità dell'esperienza di sviluppo sono tra i principali obiettivi del team di sviluppo di TurboGears. Questo framework, inoltre, presenta alcune peculiarità che lo rendono particolarmente interessante:
- Un sistema di dispatch delle richieste che impone una struttura ordinata all'applicazione, non richiedendo alcuna configurazione di regole di routing
- Un template engine totalmente XHTML-compliant, con identificazione degli errori
- Un potente sistema a Widget per la creazione di form che rende intuitivo creare interazioni con validazione dei dati.
- Supporto integrato a SQLAlchemy e MongoDB ad ogni livello del framework.
- Un Admin autogenerato per gestire tutti i dati della vostra applicazione web.
- Una struttura a componenti che consente di abilitare, disabilitare o sostituire qualsiasi comportamento del framework.
- La possibilità di essere usato sia come framework full-stack che come micro-framework.
Il progetto nasce nel 2005 da un'idea di Kevin Dangoor, ed attualmente è giunto alla release 2.4,
compatibile con Python 2.7 e Python >=3.4.
Installazione
Come per la maggior parte delle librerie e framework Python, TurboGears può essere facilmente installato con pip:
$ pip install tg.devtools
Se non ci sono stati imprevisti, al termine dell'esecuzione dovremmo aver installato TurboGears e tutte le sue dipendenze.
Creazione di una Applicazione Web
Possiamo creare un nuovo progetto TurboGears sfruttando il seguente comando:
$ gearbox quickstart nomeprogetto
Ciò creerà una applicazione Python che potrà poi essere installata con:
$ cd nomeprogetto
$ pip install -e .
e poi avviata con:
$ gearbox serve --reload
A questo punto, connettendosi all'indirizzo http://localhost:8080/ da un browser, verremo accolti dalla nostra applicazione web.
Se poi vogliamo anche poterci autenticare e sperimentare con il pannello di amministrazione (reso automaticamente disponibile all'indirizzo http://localhost:8080/admin)
sarà necessario inizializzare il database dell'applicazione come segue:
$ gearbox setup-app
Per impostazione di default, in modalità sviluppo TurboGears si appoggia ad un database locale SQLite.
Quindi non sarà necessario installare o configurare alcun DBMS come MySQL o PostgreSQL per iniziare a provarlo.
Il framework
Object Dispatch
Per capire il funzionamento delle applicazioni web TurboGears, è importante capire il funzionamento della metodologia con cui le richieste vengono indirizzate ai controller.
La maggior parte dei framework, infatti, utilizza delle regular expression per effettuare il mapping delle URL a metodi. In TurboGears, invece, le richieste vengono distribuite con un sistema chiamato Object Dispatch.
Con questo meccanismo, la radice del sito è considerata l'oggetto RootController
, dichiarato nel file root.py all'interno del modulo dei controller.
Ogni richiesta viene divisa sulla base del percorso dell'URL ed a partire da / viene elaborata cercando eventuali figli del RootController
che siano in grado di soddisfarla.
Se, ad esempio, effettuassimo una richiesta HTTP verso http://localhost:8080/about, questa verrebbe gestita dal metodo about
del RootController
,
mentre http://localhost:8080/secc/some_where è gestita dal metodo some_where del controller SecureController,
in quanto instanziato come secc
all'interno del RootController
:
class RootController(BaseController):
secc = SecureController()
@expose('prova.templates.about')
def about(self):
"""Handle the 'about' page."""
return dict(page='about')
Questo sistema di dispatch è considerato uno dei principali vantaggi del framework,
in quanto permette di prototipizzare rapidamente applicazioni web senza doversi preoccupare del routing.
Inoltre, spinge ad una coesione molto ordinata delle funzionalità, permettendo a qualsiasi programmatore che collabori
ad un progetto già avviato di capire senza sforzo dove è il codice che implementa una specifica parte del sito, e modificarlo.
Come in ogni framework MVC, le applicazioni TurboGears sono divise in una serie di modelli, almeno un controller ed una serie di viste. Quando creiamo una nuova web application, ci verranno già forniti un controller, alcune viste ed i modelli necessari a gestire l'autenticazione sul sito.
In questo modo sarà sufficiente adattare l'applicazione autogenerata alle nostre esigenze per ottenere ciò che volevamo.
Validated Template Engine
L'altra peculiarità di TurboGears è di essere l'unico framework a larga difussione ad aver
scelto un template engine in grado di comprendere realmente la struttura dei template.
Questo, nel tempo, ha portato il team del progetto a sviluppare il suo proprio template engine
di nome Kajiki, che è in grado di offrire performance
comparabili a quelle di engine come Jinja, ma che è in grado di offrire delle garanzie in più.
I template sviluppati in Kajiki sono file XHTML con degli attributi specifici che
consentono il controllo di flusso:
<html>
<head><title>$title</title></head>
<body>
<h1>$title</h1>
<ul>
<li py:for="x in range(repetitions)">
This is item ${x}
</li>
</ul>
</body>
</html>
Ciò permette a Kajiki di validare i template e riportare errori nell'HTML (come tag malformati,
o non chiusi) e di implementare funzionalità come l'escaping automatico dei dati inseriti e la
traduzione automatica del testo presente nel template.
Inoltre, trattandosi di template XHTML, qualsiasi editor WYSIWYG sarà in grado di visualizzare
i nostri template ed editarli.
Per Approfondire
Chi fosse interessato a sperimentare con TurboGears ed approfondire ulteriormente le sue potenzialità,
può fare riferimento alla documentazione
ed eventualmente seguire i tutorial disponibili sul sito.