Inizio una serie di articoli che vorrei dedicare a questo magnifico framework che, sebbene abbia già guadagnato una certa notorietà internazionale, mi pare che in Italia sia ancora poco popolare, forse proprio perchè non c’è molta documentazione nella nostra lingua.
Preciso subito che Web2py è il framework python che utilizziamo in Epysoft da un paio d’anni e, se questo mi qualifica come un suo utente sufficientemente esperto è altrettanto vero che i miei giudizi sono dichiararatamente “schierati”.
Il sito di riferimento, per prima cosa, è www.web2py.com dove recentemente è stato pubblicato il manuale completo del framework scritto dal creatore di Web2py, Massimo Di Pierro, professore universitario alla DePaul University.
La domanda posta nel titolo di questo post, una domanda che a dire il vero spesso si pongono gli utilizzatori di Python ad ogni annuncio di un nuovo framework, se la pone scherzosamente lo stesso Massimo nell’introduzione del suo libro: “Sono colpevole, dopo essermi pubblicamente lamentato dell’esistenza di troppi framework basati su Python, dopo aver decantato i meriti di Django, Pylons, Turbogears, CherryPy e web.py, dopo averli utilizzati professionalmente e averli insegnati in corsi universitari, non ho saputo resistere alla tentazione di crearne uno in più: WEB2PY”.
Una applicazione creata con Web2py aderisce a quella particolare pattern di programmazione denominata MVC (Model View Controller): come noto questa pattern prevede una separazione tra la rappresentazione dei dati (View), la struttura dei dati (Model) e la logica dell’applicazione (Controller). Quanto poi effettivamente il codice prodotto con Web2py sia rigorosamente MVC dipende molto ovviamente, come vedremo, dal programmatore stesso ma, in generale, si può dire che il framework è predisposto alla creazione di codice molto leggibile e separabile tra i vari layer.
Molti web framework, anche tra quelli basati su Python, vengono realizzati collegando tra loro attraverso del “glue code” dei componenti già esistenti e diffusi nel mondo open source: un tipico esempio di questo approccio è Turbogears che utilizza Genshi come motore di rendering, FormEncode per la validazione dell’input, SQLAlchemy come layer di modellizzazione SQL, ToscaWidgets per i form widget ed altro ancora. Se questo a prima vista può apparire un vantaggio in quanto i singoli componenti sono in genere ben collaudati e garantiscono ottime performance, a mio parere ha il grave effetto collaterale di creare un framework poco coerente ed in cui l’effettiva flessibilità delle varie parti dipende fortemente dal glue code che le tiene insieme. Nel caso di Web2py l’approccio è stato completamente diverso essendo costruito bottom up, dal linguaggio di template al layer di astrazione per il database, e questo a mio avviso è una caratteristica che si nota subito iniziando a programmare cioè la presenza di un ambiente organico in cui tutte le componenti e le API sono interfacciate naturalmente tra loro.
Dopo questa disordinata introduzione, nel prossimo articolo cominciaremo a vedere il DAL, il layer di Web2py che gestisce l’interazione della nostra applicazione con i database.