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
- Un template engine
- Un potente sistema a Widget
- Supporto integrato a SQLAlchemy e MongoDB
- Un Admin autogenerato per gestire tutti i dati della vostra applicazione web.
- Una struttura a componenti
- La possibilità di essere usato sia come framework full-stack 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 http://localhost:8080/admin
$ 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
PostgreSQL
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
about
RootController
mentre http://localhost:8080/secc/some_where
in quanto instanziato come secc
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
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 modelli controller viste
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.