Web2py: installazione e primo esempio

Web2py viene fornito in tre versioni: una versione binaria per Windows, una versione binaria per OSX ed una versione “source” per Windows, Linux e OSX. La differenza sostanziale è che le prime due includono anche l’interprete Python e tutti i moduli fondamentali del linguaggio. Se sul vostro sistema è già installato Python vi consiglio senz’altro di usare la versione “source”, raccomandabile anche se intendete solo testare a fondo questo framework. A proposito di Python, le versioni da usare per evitare complicazioni sono la 2.5 oppure la 2.6 che sono quelle che utilizziamo da tempo in Epysoft.
Una volta scaricato il pacchetto zip dal solito link www.web2py.com, procedete a scompattarlo in una cartella qualsiasi ed avviate web2py.py: se la vostra installazione di Python è corretta dovreste vedere qualcosa di molto simile alla immagine a sinistra web2py server Viene richiesto l’inserimento di una password che vi permetterà di accedere alla interfaccia amministrativa: questa sarà disponibile solo se inserirete una password e solo da www.epysoft.com per motivi di sicurezza. I campi successivi della finestrella vi mostrano che il server viene eseguito di default da www.epysoft.com (IP 127.0.0.1) e porta 8000. Avviate il server con “Start Server” e verrà aperto automaticamente il browser di default alla home page del server; se non avete alcun browser di default potete naturalmente accedere alla stessa pagina aprendo il vostro browser e digitando l’indirizzo http://127.0.0.1:8000/ .
La Home page predefinita è quella dell’applicazione Welcome che è sempre presente nel pacchetto di installazione insieme a Examples (molto utile per vedere alcuni esempi di utilizzo) e Admin. Accediamo alla interfaccia amministrativa dal link relativo e dopo aver inserito la password scelta nella finestra iniziale.

Come si vede dalla figura siamo nella pagina site, da dove è possibile amministrare tutte le applicazioni installate: nel caso di figura esse sono Admin (default), blog, epysoft, examples (default), oldepysoft e welcome (default). Al momento per noi sono importanti solo alcune voci di menu:
Create new application: che useremo tra poco per creare la nostra prima applicazione;
uninstall: sotto il nome della relativa applicazione che volete disinstallare;
Upload & Install new application: utile per installare nuove aplicazioni già pacchettizzate (ne trovate molte sul sito web2py.com);
Pack all: sotto il nome della applicazione che volete “pacchettizzare” e ridistribuire e che verrà poi installata usando il menu precedente;
Clean: elimina da una applicazione tutti i file temporanei (errori, sessioni, file di cache), utile per non appesantire inutilmente il pacchetto di installazione nel caso vogliate distribuirla;
Edit: vi permette di entrare nella pagina di gestione di una applicazione specifica.
Andiamo adesso a creare la nostra prima applicazione che, come vuole tradizione, sarà la classica “Hello World!” e che chiameremo Hello. Dalla pagina site dove ci troviamo, andiamo nel menu “Create new application” sulla destra e digitiamo hello e poi facciamo clic sul bottone create.
Automaticamente vengono create tutta una serie di cartelle predefinite e veniamo reindirizzati sulla pagina di amministrazione della nostra nuova applicazione ed in cui le voci amministrative sono divise in 6 gruppi, tre dei quali relativi alla filosofia MVC che sta alla base del framework:
Models: da dove gestiremo la base dati (di default sono già presenti db.py e menu.py dei quali parleremo più avanti);
Controllers: da dove gestiremo le azioni (o Controllori) della nostra applicazione e dove sono già presenti di default appadmin.py e default.py;
Views: da dove gestiremo le “viste” della nostra applicazione ovvero i file che “presentano” i dati all’utente finale. Sono presenti diversi file generati di default e che vedremo man mano al momento opportuno;
Languages: da dove si accede ai file che ci permettono di tradurre la nostra applicazione in altre lingue;
Static Files: ove sono presenti i file statici (css, javascript, immagini ecc) di default;
Modules: i moduli Python aggiuntivi necessari alla nostra applicazione;
Plugins: da dove è possibile caricare nell’applicazione appositi plugin.
Concentriamoci per il momento sulla nostra prima applicazione che non utilizza alcuna base di dati (per il momento) e quindi procediamo alla sezione Controllers: come detto esistono due controller di default già pronti, il primo appadmin.py ci permette di amministrare la base dati (creazione di tabelle, query, insert, update, delete ecc) e di questo al momento non abbiamo bisogno in quanto non utilizzeremo alcuna base dati; il secondo default.py (che di default, come vediamo dai link relativi, espone le azioni di default index, user, download e call) è quello che ci serve e che andremo ad editare attraverso il link EDIT. Fughiamo subito un dubbio: il framework permette di editare i vari file attraverso il suo editor interno restando all’interno della interfaccia web, ma questo non significa che non possiate utilizzare qualsiasi editor di vostro piacimento sia per i file python (Wing, Eclipse e mille altri) che per i file html e javascript. L’editor interno deve essere visto come un plus, magari comodo per ritocchi rapidi di emergenza e non come la regola che web2py vuole imporre al programmatore. Per questo semplice esempio utilizzeremo l’editor integrato, facciamo clic su EDIT (accanto alla voce default.py). ed ecco l’editor che ci mostra il contenuto del file default.py. L’azione (funzione di python) che ci interessa modificare è index, cioè quella che sarà invocata di default al lancio della nostra applicazione. Cancelliamo tutto quello presente di default al di sotto della dichiarazione della funzione “def index():” e scriviamo il seguente codice:

def index():
    return "Ciao dalla mia prima applicazione Hello"

salviamo le modifiche con SAVE e torniamo alla pagina di edit della applicazione dal menu in alto alla voce EDIT. Se adesso facciamo clic sul link index, accanto alla voce del controller default.py, si aprirà nel browser la pagina relativa che avrà indirizzo http://127.0.0.1:8000/hello/default/index ovvero del tipo, che ritroveremo in tutte le nostre applicazioni, http://server/applicazione/controller/azione.
Cosa abbiamo fatto? Abbiamo detto al controller che quando viene chiamata l’azione index esso deve restituire al browser la stringa di testo “Ciao dalla mia prima applicazione Hello” cosa che puntualmente viene fatta. Fino a questo momento non abbiamo nemmeno utilizzato una View, quello che vediamo non è ancora una pagina HTML ma solo del puro testo. Per far sì che il controller utilizzi una View l’azione deve restituire un dizionario: se questo avviene il controller invocherà di default la View che ha lo stesso nome dell’azione che viene eseguita (nel nostro caso quindi index.html) e le passerà i parametri presenti nel dizionario stesso. Entriamo nuovamente con EDIT a modificare il controller default.py nella sua azione index e scriviamo adesso:

def index():
    return dict(miomessaggio="Ciao dalla applicazione Hello")

Adesso dobbiamo preparare la View index.html che verrà utilizzata dal controller per il render della nostra pagina HTML: torniamo alla pagina EDIT dell’applicazione. Dall’elenco delle View potete notare che index.html esiste già di default, quindi con il solito link EDIT andiamo a modificarla. Cancelliamo tutto il contenuto e scriviamo un po’ di HTML:

<html>
<head></head>
<body>
<h1>{{=miomessaggio}}</h1>
</body>
</html>

Notate, come unica cosa insolita in un file HTML, la presenza delle doppie graffe: questa sintassi è quella usata da Web2py per inserire all’interno della View i parametri che il controller, con la sua azione index, ha passato, nel nostro caso “miomessaggio”. Una delle cose che più si apprezzano in Web2py è la semplicità del suo “linguaggio” di costruzione delle Viste HTML: sono dei normalissimi file HTML all’interno dei quali vengono inseriti i parametri esterni con la semplicissima sintassi che abbiamo visto. Dopo un nuovo SAVE ed essere ritornati alla pagina di editing della applicazione, dal solito link index potrete vedere la vostra nuova home page che è adesso una pagina HTML a tutti gli effetti.
La nostra prima fondamentale applicazione è stata scritta: nella prossima puntata vedremo qualcosa di un po’ più interessante.

About the Author

Carlo Bazzo
Carlo Bazzo è fondatore di Epysoft, una start up tecnologica con sede a Treviso e CTO di Hdemo Network Business Solutions. Puoi contattare Carlo Bazzo su Linkedin.