Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
BulgaraCeha slovacaCroataEnglezaEstonaFinlandezaFranceza
GermanaItalianaLetonaLituanianaMaghiaraOlandezaPoloneza
SarbaSlovenaSpaniolaSuedezaTurcaUcraineana

BiografiaBiologiaBotanicaChimicaComputerComunicazioneCostruzioneDiritto
EducazioneElettronicaFisicaGeografiaGiochiGrammaticaIngegneriaLetteratura
LibriMarketingMatematicaMedicinaMusicaNutrizionePsicologiaRicette
SociologiaStoriaVarie

La mia prima applicazione in ZOPE

computer



+ Font mai mare | - Font mai mic



DOCUMENTE SIMILARE

La mia prima applicazione in ZOPE

Prefazione

Un importante capitolo dell’Informatica moderna riguarda sicuramente Internet che, nella sua forma più diffusa, il Web, è entrata a fare parte del quotidiano. Sempre più attività vengono gestite via Internet, grosse moli di dati attraversano quotidianamente la Rete: dai dati borsistici ai messaggi interpersonali; la necessità di organizzare questi dati in modo da essere velocemente reperibili rappresenta appunto una tra le più importanti aree di questo settore.



In questo articolo viene presentato uno strumento che permette la costruzione e il mantenimento di siti Web dinamici, ossia capaci di accedere e di gestire dati memorizzati in sistemi remoti che ne consentono l’organizzazione, presentando a priori alcuni aspetti fondamentali della struttura delle applicazioni Web.
In particolare viene presentata una piccola applicazione in Zope che si interfaccia con un database relazionale SQL esterno

Giugno 2002
Andrea Urso

Indice

  1. La mia prima applicazione in Zope
  2. Introduzione
  3. Innanzi tutto: che cos’è ZOPE?
  4. Cenni sul protocollo HTTP, CGI e ZServer
  5. I Fondamenti di Zope: connessione e DTML
  6. Connessione ad una base di dati esterna
  7. Creazione di un’applicazione Web in Zope
  8. Creazione delle tabelle
  9. Realizzazione del livello dei dati: I metodi Z SQL
  10. I livelli della logica della presentazione e dell’applicazione: I metodi DTML
  11. Evoluzione di ZOPE e considerazioni personali

Download dei sorgenti di Gadfly Connection in formato .zexp importabili in ZOPE
Download dei sorgenti in formato .zexp in ZOPE

Bibliografia:

  1. A. LATTEIER, M. PELLETIER. The Zope book. New Riders.
  2. M. B ROCKMANN, K. KIRCHNER, S. LÜHNSDORF, M. PRATT. ZOPE, Web application construction kit SAMS
  3. A. ALBANO, G. GHELLI, R. ORSINI.Basi di dati relazionali e a oggetti. Zanichelli.

Siti consultati:

  1. www.Zope.org
  2. www.chordate.com/gadfly.html

Introduzione

Che cos’è un’applicazione Web?. È un’applicazione che utilizza la tecnologia Web (server Web, client Web, protocolli standard Internet) per offrire, su richiesta da un browser, servizi che comportano un’elaborazione remota di informazioni.
Esempi di applicazioni Web sono: i motori di ricerca, le prenotazioni online di alberghi, il commercio elettronico.

Vogliamo porre l’attenzione sulle applicazioni di questo tipo che prevedono l’utilizzo di basi di dati remote.

Innanzi tutto vediamone alcuni vantaggi e svantaggi.

Vantaggi:

  • I client non devono istallare alcuna applicazione.
  • L’applicazione è modificabile senza dover aggiornare eventuali copie di programmi già esistenti nei client.
  • Indipendenza dal calcolatore usato come client.
  • Indipendenza dal browser usato dal client.
  • Trasparenza degli accessi in rete.

Svantaggi:

  • La rete può essere poco affidabile e lenta.
  • Occorre porre maggiore attenzione alla sicurezza dei dati.
  • Maggiori Costi del server.
  • Limitazioni del linguaggio HTML che comportano l’esecuzione di codice sul client.
  • Per ottenere delle buone prestazioni occorrono macchine potenti sia sul lato server sia sul client.
  • Strumenti non maturi per lo sviluppo delle applicazioni.

Distinguiamo fra: pagine statiche e pagine dinamiche.

Il contenuto delle pagine statiche che compongono un sito è stabilito al momento della loro creazione.
Il contenuto delle pagine dinamiche è invece stabilito al momento della richiesta da parte dell’utente.

Il
Figura 1. Il Web per la pubblicazione di pagine statiche.

Il
Figura 2. Il Web per la pubblicazione di pagine dinamiche.

Introduciamo adesso i livelli logico-funzionali di un’applicazione Web.

Possiamo distinguere tre possibili livelli:

  • Logica della presentazione: gestisce l’interfaccia con cui vengono raccolte le richieste degli utenti e le presentazioni delle risposte ottenute con elaborazioni svolte negli altri livelli dell’applicazione.
  • Logica dell’applicazione: interagisce con il DBMS sulla base delle richieste degli utenti, riceve la risposta alla richiesta inoltrata e sottopone ad eventuali elaborazioni le informazioni restituite dal DBMS prima di inviarle al livello di logica di presentazione.
  • Gestione dei dati: Esegue le richieste della logica dell’applicazione e comunica ad essa l’esito delle operazioni o i dati recuperati dalla base di dati.

Nella realizzazione delle applicazioni Web occorre affrontare i seguenti problemi:

  • Come realizzare i programmi dei tre livelli logico-funzionali.
  • Come distribuirli sulle macchine che costituiscono la Rete.
  • Come fare comunicare tali programmi.

Non esiste un unico modo di procedere. La prima cosa che distingue una soluzione da un’altra è la macchina (livello fisico - tier) sulla quale i programmi sono in esecuzione. Qui di seguito sono illustrate alcune possibili architetture.

Tier

Configurazioni

  Legenda

  A: logica dell’applicazione
  P: logica di presentazione
  D: gestione dei dati

Web Browser

P,A

P

P

P

Web Server

D

A,D

A

Application Server

A

Data Server

D

D

A seconda di quale configurazione si realizza possiamo fare un’ulteriore distinzione fra:

  • Client pesante: gestisce pagine HTML, molto codice eseguibile che scarica dal server (applet java che richiedono un lungo tempo di trasferimento), oppure software preinstallato e richiede prodotti aggiornati e calcolatori potenti sul cliente.
  • Client leggero: gestisce pagine HTML, poco codice eseguibile che scarica dal server e richiede calcolatori di potenza limitata, ovvero poche risorse e nessuna amministrazione per l’aggiornamento del software.

La configurazione uno della tabella, sopra riportata, rappresenta la realizzazione di un client pesante, i livelli logico-funzionali P ed A, sono entrambi eseguiti sul Browser Web, cioè stanno entrambi sul lato client, mentre il livello D è realizzato sul lato server.

L’utilizzo di client leggeri o pesanti dipende molto da dove viene utilizzata l’applicazione. Per esempio se l’applicazione gira su Intranet, allora possono andare bene anche i client pesanti, mentre se l’applicazione gira su Internet, allora è consigliabile che i client siano leggeri.

Le configurazioni da due a quattro rappresentano varie possibilità di realizzare client leggeri, infatti sul lato client è presente solamente il livello P, mentre gli altri due livelli logico-funzionali possono essere eseguiti negli altri tier.

Recentemente sono stati sviluppati ambienti integrati per lo sviluppo di applicazioni Web, alcuni esempi rilevanti sono:

  • WebObjects (Apple)
  • ZOPE  (open source)
  • Allaire’s Cold Fusion
  • Vignette’s Story Server

In questo articolo illustrerò alcuni aspetti del sistema ZOPE.

Innanzi tutto: che cos’è ZOPE?

ZOPE significa: Z Objects Publishing Environment. Si tratta di un Web Application Server la cui caratteristica è quella di creare applicazioni Web che per essere mantenute ed eseguite necessitano soltanto di un browser sul lato client, viene così eliminata la necessità di dover installare del software aggiuntivo realizzando quelli che vengono in gergo chiamati client leggeri. ZOPE è un software di tipo open source inizialmente ideato dalla Digital Creations e che oggi viene sviluppato in collaborazione con i molti membri della community che contribuiscono all’aggiunta e al miglioramento delle sue caratteristiche. È garantita la portabilità su piattaforme Windows, Linux e Solaris e la possibilità di utilizzare basi di dati di tipo relazionale realizzate con i più comuni Sistemi per la loro gestione (DBMS).

ZOPE è costituito da più moduli interagenti:

  • Un server Web. ZOPE contiene già un server Web in grado di supportare tutte le funzionalità necessarie al servizio delle applicazioni in esso sviluppate. Anche la necessità di utilizzare un altro server Web (per problemi di prestazioni o altro) trova soluzione in ZOPE, esiste infatti la possibilità di sostituire il server Web interno con un altro qualsiasi che supporti l'interfaccia CGI o FastCGI.
  • Un'interfaccia di amministrazione. Attraverso un qualunque browser Web, ZOPE fornisce una completa interfaccia per la gestione e lo sviluppo di applicazioni Web. La gerarchia degli oggetti che compongono l’applicazione è visualizzata attraverso una struttura ad albero.
  • Un database ad oggetti.. ZOPE, a differenza di prodotti analoghi, ha trasformato il Web in una struttura ad oggetti: ricordiamo che ZOPE significa: Z Objects Publishing Environment.
    Un oggetto in ZOPE è un file, cioè un pezzo di codice editabile e controllabile attraverso un Web browser.
    Il sistema contiene al suo interno una base di dati ZODB (Z Object Data Base) nella quale vengono immagazzinati gli oggetti che compongono le applicazioni e il loro stato, con la possibilità di undo.
    All’interno del file system, ZOBD è memorizzato nel file: data.fs..
    Inoltre offre la possibilità di:
    • Lavorare con DBMS relazionali esterni quali Postgres, Sybase, Oracle, MySQL
    • Scrivere applicazioni Web in linguaggi quali Python e Perl oltre che nel proprietario DTML.

Zope è distribuito in due formati: uno pre-compilato per i vari sistemi operativi, da installare direttamente; oppure nella versione sorgente che deve essere compilata.

La versione pre-compilata ha il vantaggio di essere di facile installazione, mentre quella con i file sorgenti è più piccola e veloce da scaricare dalla Rete e inoltre è possibile effettuare modifiche (è Open Source!).

Ad esempio la distribuzione per Windows la si installa molto facilmente in quanto consiste in una serie di file compressi che nel momento stesso in cui si decomprimono (utilizzando WinZip) si installano correttamente nelle cartelle predefinite.

La versione di Zope di cui si è fatto uso in questa tesi è la 2.4.0. inclusa nel libro Zope web application construction kit (vedi bibliografia) installata su un PC con sistema operativo Windows 98.

Per iniziare l’installazione occorre eseguire il file Zope-2.4.0.exe cliccando sopra la relativa icona oppure dando il comando da DOS. A questo punto si aprirà una finestra che ci guiderà durante l’installazione, occorrerà specificare in quale folder (cartella) installare l’applicazione.

Alla fine verrà chiesto di inserire uno username ed una password che permetteranno di identificare l’amministratore di ZOPE. A questo punto i file cominceranno ad essere installati nella directory prescelta. Supponendo di avere scelto l’installazione standard, Zope utilizzerà il proprio server Web: ZServer, che il programma di installazione avrà configurato sulla macchina in cui si è deciso di installare Zope, l’unica cosa che adesso rimane da fare è mandarlo in esecuzione:

Eseguire il programma start.exe contenuto in /programmi/WebSite.
Aprire un browser, per esempio Netscape digitando come URL https://localhost:8080/manage. Saranno richiesti lo username e la password dell’amministratore, inseriti durante l’installazione, quindi si entrerà nella pagina principale di Zope dalla quale sarà possibile iniziare a sviluppare le proprie applicazioni Web.

Nota: l’indirizzo https://localhost:8080  ha uno specifico significato per il browser Web, significa: “questa macchina”. Se la macchina ha un nome differente e' ugualmente possibile accedere a Zope attraverso l’indirizzo https://NomeDellaMacchina.com:8080.

Cenni sul protocollo HTTP, CGI e ZServer.

Descriviamo brevemente il protocollo HTTP
HTTP è l’acronimo di Hiper Text Transfer Protocol. Si tratta del protocollo che permette la comunicazione fra un client Web e un server Web. Il client apre una connessione con il server e gli invia una richiesta. Il server elabora la richiesta e restituisce una risposta. Alla fine della comunicazione la connessione viene chiusa.

Il cliente fa uso di un browser Web che deve essere capace di interpretare la risposta ricevuta e di aprire altre eventuali connessioni con il server Web, queste ultime invisibili all’utente, in modo da ricevere altre informazioni riguardanti ad esempio il modo in cui il documento deve essere visualizzato. Ad ogni richiesta corrisponde l’apertura e la successiva chiusura di una connessione. La richiesta eseguita da un cliente avviene attraverso l’invio di un URL e di altre informazioni relative al browser che si sta utilizzando.

Distinguiamo fra i metodi GET e POST, entrambi fanno richiesta di informazioni al server ma con alcune differenze.

Il metodo GET viene utilizzato in genere quando la richiesta al server Web è, per esempio, l’apertura di una nuova pagina richiamata cliccando su un link alla pagina.

Il metodo POST viene in genere utilizzato nell’esecuzione di form che comporta, per esempio, l’invio di dati al server.

Nel caso di pagine Web dinamiche si fa uso di ulteriori meccanismi come il CGI.

Descriviamo brevemente che cos’è il CGI.
CGI è l’acronimo di Common Gateway Interface. Si tratta del metodo con cui un server Web comunica con i programmi sviluppati per rispondere alle richieste che gli utenti formulano attraverso il browser Web. L’input che l’utente da attraverso un browser è processato da uno script CGI.

Generica
Figura 3. Generica richiesta Web processata da uno script CGI

In figura 3 è possibile distinguere i seguenti passi:

  1. Richiesta attraverso il browser Web al server Web https://pippo.com
  2. Il server determina la richiesta  e se si tratta di un programma lo esegue passando i dati forniti in input dall’utente.
  3. Il server CGI  processa i dati in input e per esempio esegue una interrogazione su una base di dati o vi memorizza i dati ricevuti in input. Lo script restituisce il risultato formattato per il documento HTML al server Web.
  4. Il server Web restituisce al browser il risultato finale.

Svantaggi di questo metodo sono ad esempio i cicli di clock spesi dalla CPU in quanto ad ogni richiesta segue l’esecuzione di uno script CGI.

Zope invece è sempre attivo in background (a tale proposito viene definito un long running process o demone se si è sotto un sistema Unix) e non termina alla fine di una richiesta Web.

In questa maniera può rispondere alla richiesta successiva da parte del server Web evitando gli overhead in cui i programmi CGI occorrono ad ogni nuova richiesta.

Che cos’è ZServer.
Si tratta di un server Web scritto in C, che fa parte di ogni distribuzione di Zope e che permette di eseguire Zope pur non avendo a disposizione un server Web, come Apache.

In aggiunta ad un server Web, Zserver fornisce un server FTP e un server PCGI.

Alle volte è preferibile utilizzare Zope con un altro server Web (Apache per esempio)  piuttosto che con Zserver. Apache fornisce infatti più servizi dello ZServer oppure permette di gestire un sito Web gestito con Zope solamente in parte.

Se non si utilizza lo Zserver, allora occorre configurare il server utilizzando l’applicazione PCGI.  Si tratta di un’applicazione leggera che il server Web lancia ogni volta che si effettua una richiesta per dialogare con Zope. 

Per utilizzare Zope con Apache occorre:

Installare Zope.

Copiare il file Zope.cgi in: home/httpd/cgi-bin/ utilizzando il comando Cp –p Zope.cgi /home/httpd/cgi-bin

Il parametro –p è importante in quanto Zope.cgi non può avere proprietari.

Assicurarsi che Apache trasferisca i dati di autenticazione a Zope editando il file httpd.conf. Per fare questo occorre essere in Linux come root, aprire il file Zope.cgi con un editor di testi ed aggiungere le seguenti righe di codice:

1: RewriteEngine on
2: NevriteCond % ^(.*)
3: RewriteRule ^/Zope(.*) /home/httpd/cgi-bin/Zope.cgi$1
[e=HTTP_CGI_AUTHORIZATION:%1,t+application/x-httpd-cgi,l]

A questo punto è necessario fare ripartire Apache.

I Fondamenti di Zope: connessione e DTML

Tra gli aspetti di ZOPE, quelli che saranno trattati nei prossimi paragrafi sono relativi alla sua connessione ad una base di dati esterna indipendentemente dalla categoria (commerciali od open source) alla quale questa appartiene e a come realizzare le interfacce che ne permetteranno l’interrogazione attraverso un browser.

Per essere connesso ad una base di dati esterna ZOPE ha bisogno di un adattatore. Esistono differenti adattatori secondo quale sistema viene utilizzato per la gestione della base di dati: MySQL, Gadfly, ecc.

Attraverso questa connessione ZOPE invia ad esempio un comando SQL, questo viene elaborato e le informazioni richieste vengono restituite attraverso tale collegamento.

Per rendere possibile l’interrogazione della base di dati e la visualizzazione delle informazioni richieste attraverso un browser, è necessario creare pagine Web di tipo dinamico. Per renderle tali occorre utilizzare insieme al linguaggio HTML un altro linguaggio simile a quest’ultimo che prende il nome di DTML: Document Template Markup Language.

Per costruire applicazioni Web con ZOPE occorre utilizzare folder (cartelle) che conterranno gli oggetti che di volta in volta saranno creati.

I folder permettono di organizzare la struttura dell’applicazione. All’interno dei folder gli oggetti, con l’aggiunta di script, diventano parte integrante dell’applicazione. In questa maniera, oltre a costituire la vera e propria impalcatura che sorregge il sito, la struttura rende visibili i livelli logico–funzionali dell’applicazione.

Un’importante caratteristica di ZOPE è quella di poter chiamare un qualunque oggetto contenuto all’interno di un folder attraverso l’URL all’oggetto stesso. L’URL consiste nel cammino fino al folder che contiene l’oggetto da richiamare seguito poi dal nome di questo. Gli oggetti possono quindi essere richiamati e manipolati attraverso il browser.

Sono presenti due possibili tipi di metodi: DTML e ZSQL, con i quali si realizzano le applicazioni Web.

Nota: in ZOPE i metodi sono dei file che contengono codice eseguibile.

Vediamo come realizzare in ZOPE, attraverso tali metodi, i programmi dei tre livelli logico – funzionali che costituiscono un’applicazione Web e come questi sono distribuiti sulle macchine della rete  (livello fisico – tier).

L’architettura principale di applicazioni Web realizzate con ZOPE è la seguente:

  • Logica di presentazione, attraverso il Web Browser (Metodi DTML).
  • Logica applicativa, attraverso l’Application Server (Metodi DTML e ZSQL).
  • Gestione dei dati, attraverso il DBMS.

I metodi DTML sono realizzati in un linguaggio di scripting la cui sintassi è simile a quella dell’HTML, i comandi sono eseguiti da ZOPE sul lato servente e i risultati, inviati attraverso la rete, vengono visualizzati sul lato cliente tramite un browser Web.

Una volta dentro ZOPE, per creare un metodo DTML basta sceglierlo dal menu a tendina presente nella schermata principale (vedi figura 4). Verrà immediatamente caricata la forma che permetterà l’inserimento del codice nell’area di testo.

I metodi ZSQL sono utilizzati per contenere le interrogazioni ed i comandi SQL per manipolare i dati contenuti nel DBMS connesso. Anche per creare un metodo ZSQL basta sceglierlo dal menu a tendina nella schermata principale di ZOPE. Verrà immediatamente caricata la forma che permetterà l’inserimento del codice SQL nell’area di testo.

Come vedremo in seguito, i metodi possono richiamare e manipolare al loro interno altri metodi, siano questi definiti dal programmatore o facenti parte di librerie (API). Viene così realizzata la comunicazione tra i tre livelli logico – funzionali.

Schermata
Figura 4. Schermata iniziale di ZOPE

Tag DTML. Qui di seguito sono presentati una serie di tag propri del linguaggio DTML di Zope e la loro funzionalità. Questi tag verranno utilizzati nello sviluppo dell’applicazione presentata nel Capitolo 3.

Come già detto, la sintassi è simile a quella del linguaggio HTML: si utilizzano tag racchiusi tra le parentesi <  >.

<dtml-tag nome attributo =”valore” >
   Codice
</dtml-tag nome >

  • Il tag <dtml-var>
    Permette l’inserimento di variabili all’interno di metodi DTML.
  • Il tag <dtml-if >.
    Permette di esprimere condizioni:
    <dtml-if esperessione>
    <dtml-elif espressione2>
    <dtml-elif espressione3>

    <dtml-elif espressione n-1>
    <dtml-else espressione n>
    </dtml-if>
  • Il tag <dtml-in >

    </dtml-in >
    Itera su una sequenza di elementi, per esempio per richiamare tutti i record contenuti in una tabella di una base di dati.
  • Il tag <dtml-call >

    </dtml-call >
    Permette la semplice chiamata di metodi all’interno di altri metodi.

Questi tag consentono di operare sui dati in maniera mirata riguardo alla gestione di applicazioni Web e consentono di definire, con poche righe di codice, operazioni che altrimenti necessiterebbero dell’uso di costrutti più pesanti, come avviene ad esempio per il linguaggio Java. A tale proposito è bene mettere in rilievo la potenza dei metodi DTML eseguiti sul lato server che hanno infatti funzionalità equivalenti alle servlet Java permettendo, per esempio, l’interazione con una base di dati esterna.  Questi metodi, che restituiscono HTML, differiscono invece dalle servlet Java poiché non mescolano il codice SQL con il codice DTML, ma chiamano gli appositi metodi ZSQL per svolgere le operazioni sulla base di dati connessa.

Connessione ad una base di dati esterna.

Per creare una connessione ad una base di dati esterna occorre installare l’opportuno adattatore, disponibile sul sito ufficiale di ZOPE (www.ZOPE.org).

È sufficiente scaricare dal sito il file compresso dell’adattatore desiderato, copiarlo nella directory di ZOPE ed eseguire le seguenti operazioni.

Supponiamo di voler connettere ZOPE ad una base di dati realizzata con MySQL.

Scaricando dal sito di ZOPE il relativo adattatore e spacchettandolo, questo si installerà automaticamente nella directory:

/lib/python/Products/ZMySQLDA contenuta nella directory di ZOPE.

Occorre scaricare anche il driver relativo alla base di dati che si vuole utilizzare ponendolo nella directory:

/lib/python/Products/ e spacchettare anche questo file.

Oltre a questo prodotto Zope sarà necessario installare il modulo MySQLdb presente nelle distribuzioni Python.

A questo punto la connessione ZMySQL sarà presente nel menu principale di ZOPE.

Nota: se per esempio si utilizza MySQL con il sistema operativo Windows, allora poichè la compilazione dei file è un po’ problematica in tali sistemi, occorre procurarsi i file del driver e dell’adattatore già compilati per tale sistema e sarà sufficiente porli nelle directory sopra elencate.

Vediamo adesso come realizzare la connessione fra ZOPE e la base di dati.

Innanzi tutto occorre far partire ZOPE attraverso un browser come Netscape o Explorer.

Se l’adattatore per la base di dati è stato correttamente installato, allora il menu contenente la lista degli oggetti nella schermata principale di ZOPE conterrà anche il nuovo oggetto ZMySQL. Sarà sufficiente selezionare tale oggetto per creare la connessione con il DBMS.

Del pacchetto di ZOPE fa parte anche un piccolo sistema per la gestione delle basi di dati: Gadfly. Le sue caratteristiche non sono minimamente comparabili con quelle di altri sistemi, come MySQL, ma sono ugualmente sufficienti per testare la connessione di ZOPE a una base di dati esterna, mostrare com’è possibile eseguire delle interrogazioni attraverso delle semplici interfacce e come realizzare i programmi dei tre livelli logico – funzionali. Gadfly, così come ZOPE, è stato scritto in Python e gira su qualunque sistema su cui è installato Python indipendentemente dal sistema operativo. Le applicazioni realizzate con ZOPE per essere eseguite sul lato cliente non hanno bisogno di alcun software preinstallato. È sufficiente il solo browser Web. Il pacchetto di ZOPE contiene già una versione di Python.

Nel prossimo paragrafo sarà mostrata la connessione a Gadfly.

Così com’è stato descritto precedentemente, prima di poter utilizzare una base di dati occorre effettuarne la connessione. Questo viene fatto creando un’istanza dell’adattatore della base di dati: scegliendo dal menu degli oggetti nella schermata principale di ZOPE la connessione a Gadfly, il browser aprirà automaticamente la pagina contenente la forma, mostrata in figura 5, per l’impostazione della connessione alla base di dati.

In generale, quando si crea un oggetto in ZOPE questo necessita di un identificatore univoco: Id, che è utilizzato come un URL all’oggetto.

Anche la connessione a Gadfly necessita dunque di un Id.

Occorre selezionare anche il folder che conterrà i dati, per esempio utilizzando ZOPE con il sistema operativo Windows, tale folder dovrà essere creato preventivamente all’interno di:

vargadfly e comparirà nella finestra Data Source.

Una volta compilata la forma e premuto il bottone Add, sulla schermata principale di ZOPE apparirà l’istanza della connessione a Gadfly così come mostrato in figura 6.

Cliccando col mouse su tale istanza si avranno più viste della connessione alla base di dati: Status, Properties, Test, Security, Undo, Ownership, Browse.

Verranno presentate solamente le viste Test e Browse.

Connessione
Figura 5. Connessione a Gadfly

Istanza
Figura 6. Istanza della connessione a Gadfly all’interno di un’applicazione

La finestra Test permette l’inserimento di codice SQL e la possibilità di testare le asserzioni inserite restituendo la schermata in figura 7, oppure errore se la sintassi dell’SQL non è corretta. In figura 8 è invece mostrata la finestra Browse nella quale è possibile vedere il nome e le proprietà dei campi delle tabelle create.

Finestra
Figura 7. Finestra di Test

Test
Figura 8. Test del comando SQL

Schermata
Figura 9. Schermata Browse

Una volta creata la base di dati, occorre renderla accessibile dall’esterno, cioè un qualunque utente, sul lato client, deve essere in grado di poterla utilizzare. Sono quindi necessarie delle interfacce che permettano all’utente una semplice interazione con la base di dati. Nella realizzazione di tali interfacce, che rappresentano il livello logico della presentazione di un’applicazione Web, occorre tenere sotto controllo alcuni aspetti fondamentali quali la necessità di rendere chiari i contenuti delle pagine e snella la navigazione lungo il sito pur non trascurandone il lato estetico. È chiaro che senza tali interfacce l’aggiornamento di tabelle, e più in generale l’esecuzione di comandi SQL, attraverso la finestra Test, non rispecchierebbe queste specifiche. Una maniera per inserire i dati e per eseguire i controlli su di questi è data dalla possibilità di creare dei metodi intermedi, fra l’interfaccia che l’utente usa per immettere le proprie richieste e la base di dati, appartenenti al livello della logica applicativa. In ZOPE i metodi che vanno utilizzati a tale scopo in un’applicazione sono del tipo DTML e ZSQL.

La realizzazione di metodi DTML permette la creazione delle interfacce utente con cui inserire, per esempio, i dati in una tabella. Tali dati sono quindi inviati ad un secondo metodo DTML che costituisce l’applicazione su cui ad esempio realizzare i controlli necessari ad assicurare la correttezza dei dati inseriti. Alla fine questo metodo provvederà a chiamare un terzo metodo di tipo ZSQL che, attraverso la connessione con la base di dati, aggiornerà le tabelle.

Nelle prossime pagine sarà presentato un esempio di interazione fra ZOPE e una base di dati realizzata con Gadfly.

Creazione di un’applicazione Web in Zope

In questo capitolo sarà illustrato come realizzare un’applicazione Web che fa uso di una base di dati: le relative interfacce ed applicazioni attraverso gli strumenti che ZOPE mette a disposizione. Per ragioni di tipo logistico tale esempio è stato realizzato su un PC con sistema operativo Windows 98 e con l’impiego del DBMS Gadfly interno a Zope.

Scopo dell’applicazione è quello di rendere disponibile via Internet un servizio di interrogazione e modifica di una base di dati relativa agli studenti e agli esami da questi sostenuti. Ovviamente si tratta di un esempio giocattolo il cui scopo è solamente quello di porre in evidenza alcune peculiarità di ZOPE.

L’applicazione si presenta all’utente con una semplice interfaccia, vedi figura 10, dalla quale è possibile scegliere una delle seguenti opzioni:

1. Aggiungi un nuovo studente

Menu
Figura 10. Menu principale dell’applicazione web

Una volta scelta dal menu l’operazione da eseguire, viene subito caricata la forma che ne permette l’utilizzo, qui in figura 11 è mostrata l’interfaccia per l’inserimento di un nuovo studente e in figura 12, la risposta del sistema dopo l’inserimento.

Maschera
Figura 11. Maschera per l’inserimento di un nuovo studente

Conferma
Figura 12. Conferma della riuscita dell’inserimento

Le prossime due figure mostrano ciò che l’utente riceve nel caso si scelga di interrogare la base di dati per conoscere gli esami sostenuti da uno studente.

Ricerca
Figura 13. Ricerca degli esami sostenuti da uno studente

Esito
Figura 14. Esito della ricerca

A questo punto dovrebbe essere chiaro il funzionamento dell’applicazione, ma per completezza riportiamo qui di seguito lo schema della base di dati proponendoci nei prossimi paragrafi di spiegare tutti i passi della sua realizzazione. 

Modello Studenti – Esami

Uno studente può aver sostenuto più di un esame.             L’esame è stato sostenuto da un candidato.

Studenti:(Matricola, Cognome, Nome, AnnoDi Nascita, Provincia)

Esami: (Candidato*, Materia, Voto, Lode)

Operazioni ed interrogazioni sulla base di dati:

  1. Inserisci un nuovo studente
  2. Cancella uno studente
  3. Ricerca uno studente
  4. Ricerca gli esami sostenuti da uno studente.

Creazione delle tabelle.

I passi da seguire sono:

  • Creare un nuovo folder StudentiEsami all’interno di:     C:ProgrammiWebSitevargadfly   che conterrà le tabelle della nostra base di dati.
  • Avviare ZOPE e creare un folder principale che conterrà tutti gli oggetti della nostra applicazione. Chiameremo anche questo folder StudentiEsami per evidenziare la corrispondenza con il folder creato prima.
  • All’interno del folder StudentiEsami apriamo una connessione a Gadfly così com’è stato precedentemente spiegato. Adesso è possibile creare le tabelle attraverso la vista Test.
  • Selezionare dal menu la finestra Test e scrivendo l’opportuno codice SQL creare le tabelle Studenti ed Esami che inizialmente saranno vuote. La finestra Browse permetterà di vedere ciò che si è fatto.

Come è stato già detto, Gadfly non è un vero e proprio sistema per la gestione di basi di dati, infatti molte funzioni comuni a tali sistemi non sono implementate in esso, risulta comunque sufficiente per mostrare i vantaggi che si hanno nell’utilizzo di ZOPE per la realizzazione di pagine dinamiche.

Tabelle
Figura 15. Tabelle Studenti, Esami in Gadfly

Vediamo adesso l’implementazione dei tre livelli logico – funzionali dell’applicazione.

All’interno del folder StudentiEsami creiamo altri due subfolder che chiameremo:

Presentazionie Applicativi.

Questi conterranno rispettivamente:

  • I metodi necessari alla realizzazione delle interfacce utente.
  • metodi che costituiscono l’applicazione vera e propria.

Struttura
Figura 16. Struttura ad albero dei folder dell’applicazione Studenti Esami.

I
Figura 17. I livelli logico-funzionali un’applicazione Web in ZOPE.

I
Figura 18. I livelli logico-funzionali un’applicazione Web in ZOPE.

Realizzazione del livello dei dati: I metodi Z SQL.

Per operare sulla base di dati realizzata con Gadfly sono necessari tanti metodi quante sono le operazioni che si intendono rendere possibili, per esempio: la creazione e la cancellazione di uno studente, la ricerca per numero di matricola e così via.

Ogni metodo ZSQL esegue le richieste effettuate dai programmi che implementano la logica della presentazione comunicando, agli stessi, l’esito delle operazioni o le informazioni recuperate dalla base di dati.

Dal menu della schermata principale di ZOPE scegliendo di aggiungere un metodo ZSQL, il browser caricherà la forma mostrata in figura 18 che permetterà l’inserimento del codice.

Il codice di tali metodi è una commistione fra codice SQL e DTML, quest’ultimo utilizzato per la comunicazione (passaggio dei valori delle variabili) con il livello della logica dell’applicazione Web.

Metodo
Figura 18. Metodo Z-SQL

Qui di seguito sono riportati i metodi ZSQL necessari alla realizzazione delle operazioni e delle interrogazioni sulla base di dati StudentiEsami.

Cancella_Studente:

DELETE FROM Studenti
WHERE matricola= <dtml-sqlvar Matricola>

Cancella dalla tabella Studenti tutti i campi relativi allo studente con quella matricola il cui valore è stato inserito nella variabile Matricola.

InserisciNuovoStudente:

INSERT INTO Studenti
(Matricola, Cognome, Nome, AnnoDiNascita, Provincia)
VALUES
(<dtml-sqlvar Matricola type=int>,
<dtml-sqlvar Cognome type=string>,
<dtml-sqlvar Nome type=string>,
<dtml-sqlvar AnnoDiNascita type=int>,
<dtml-sqlvar Provincia type=string>

Esegue l’inserimento di un nuovo studente nella tabella Studenti i cui campi saranno riempiti con i valori delle variabili.

Ricerca_per_Matricola:

SELECT *
FROM Studenti
WHERE matricola = <dtml-sqlvar Matricola type=int>

Ricerca all’interno della tabella Studenti lo studente associato ad una specifica matricola.

Tutti_gli_Studenti:

SELECT *
FROM Studenti

Matricola:

SELECT matricola
FROM Studenti
WHERE matricola= <dtml-sqlvar matricola type=int>

Aggiungi_Esame:

INSERT INTO Esami(Candidato, Materia, Voto, Lode)
VALUES
(<dtml-sqlvar Candidato type=int>,
<dtml-sqlvar Materia type=string>,
<dtml-sqlvar Voto type=int>,
<dtml-sqlvar Lode type=string>

Inserisce nella tabella Esami i valori contenuti nelle variabili.

Cancella_Esame:

DELETE FROM Esami
WHERE Materia = <dtml-sqlvar Materia type=string>

Tutti_gli_Esami:

SELECT *
FROM Esami

Giunzione:

SELECT matricola, cognome, materia, voto, lode
FROM Studenti, Esami
WHERE <dtml-sqlvar Candidato type=int> = candidato
AND  matricola= candidato

Esegue un’interrogazione selezionando i campi da entrambe le tabelle (Studenti ed Esami) che soddisfano la condizione: matricola uguale candidato, dove candidato è stato inserito dall’esterno.

All’interno dei metodi Z SQL sopra elencati sono presenti alcuni tag del tipo:

<dtml-sqlvar nome_della_variabile>

Questo tag viene utilizzato all’interno di metodi ZSQL e permette l’inserimento di variabili nel codice SQL controllano il tipo dei dati. Attraverso le variabili avviene la comunicazione fra i livelli: logica dell’applicazione e gestione dei dati.

È dunque possibile testare i singoli metodi e procedere all’inserimento di alcuni dati.

I livelli della logica della presentazione e dell’applicazione: I metodi DTML.

Per ogni operazione da eseguire sulla base di dati ai metodi ZSQL vengono associati altri due metodi di tipo DTML necessari per l’inserimento dei dati attraverso il browser e per realizzare l’applicazione vera e propria. A tal proposito distinguiamo tra:

  • Nome_Form
  • Nome_html

Con il primo tipo di nome è indicata l’interfaccia che viene visualizzata attraverso il browser e che permette all’utente l’inserimento dei valori nei campi necessari all’aggiornamento delle tabelle o all’esecuzione di un’interrogazione.

Con il secondo tipo di nome viene identificato il metodo applicativo, intermediario fra il primo metodo DTML e il rispettivo metodo ZSQL. Questo costituisce l’applicazione vera e propria nella quale sono eseguiti tutti gli eventuali controlli sui dati prima di interagire con il DBMS. L’importanza di tali metodi è data anche dal fatto che è di estrema utilità mantenere riuniti in un unico file l’insieme dei controlli da eseguire sui dati in modo da garantire una veloce individuazione delle eventuali modifiche da dovere apportare all’applicazione.

I primi due metodi qui presentati permettono l’inserimento di un nuovo studente nella tabella Studenti della base di dati.

  • Aggiungi_Form è l’interfaccia utente che permette l’inserimento dei dati. Questi sono quindi passati ad Aggiungi_html (vedi riga 4 e riga 8 del codice sottostante).
  • Aggiungi_html esegue al suo interno la chiamata al metodo Z SQL InserisciNuovoStudente (riga 7- 11) passandogli i valori interessati.

Aggiungi_Form:

<h1> Aggiungi un nuovo studente </h1>
</center>
<form action='Applicativi/MetodiDTML/Aggiungi_html' method=post>

<table  width='100%'>
<tr>
<td> Matricola:</td>
<td> <input type='text' name='matricola' size=6></td>
</tr>
<tr>
<td> Cognome:</td>
<td> <input type='text' name='cognome' size=20></td>
</tr>
<tr>
<td> Nome:</td>
<td> <input type='text' name='nome' size=20></td>
</tr>
<tr>
<td> Anno di nascita:</td>
<td> <input type='text' name='annodinascita' size=4></td>
</tr>
<tr>
<td> Provincia:</td>
<td> <input type='text' name='provincia' size=20></td>
</tr>
<td colspan=2>

<input type='submit' value='Aggiungi record'>
</td>
</table>
</form>
<dtml-var standard_html_footer>

Aggiungi_html

<dtml-var standard_html_header>
<dtml-let result = MetodiZSQL.Matricola(matricola=matricola)'>
<dtml-if '_.len(result)= = 0'>
<center>
  <h2>Lo studente è stato inserito</h2>
</center>
<dtml-call 'MetodiZSQL.InserisciNuovoStudente
       matricola=_['matricola'],
       cognome=_['cognome'],
       nome=_['nome'],
       annodinascita=_['annodinascita'],
       provincia=_['provincia'])'>
<dtml-else>
<center>
   <h2>Errore Matricola già esistente</h2>
</center>v </dtml-if>
</dtml-let>
<table>
<tr>
<td>
<form action='Applicativi/MetodiDTML/Aggiungi_Form'>
<input type='submit' value='Inserisci ancora'>v </form>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>
</td>
</tr>
</table>
<dtml-var standard_html_footer>

Del tutto analoghi ai due metodi precedenti sono quelli relativi all’inserimento di un nuovo esame nella tabella Esami.

I prossimi due metodi DTML sono quelli che implementano la ricerca di uno studente in base al suo numero di matricola.

  • Ricerca_Form è l’interfaccia in cui viene richiesto il numero di matricola per poi eseguire la query sulla base di dati.
  • Ricerca_html è il metodo che richiama Ricerca_per_Matricola e che restituisce tutti i campi richiesti.

Ricerca_Form:<dtml-var standard_html_header>
<center>
<h2>Ricerca di uno studente</h2>
</center>
<form action='Applicativi/MetodiDTML/Ricerca_html' method=post>
<table width='100%'>
<tr>
<td>Matricola:</td>
<td><input type='text' name='matricola' size=6></td>
</tr>
<tr>
<td colspan=2><input type='submit' value='Cerca'></td>
</tr>
</table>
</form>
<dtml-var standard_html_footer>

Ricerca_html:
<dtml-var standard_html_header>
<center>
<h2>Risultato della ricerca</h2>
</center>
<table width='100%' border=2>
<tr>
<th>Matricola</th>
<th>Cognome</th>
<th>Nome</th>
<th>Anno Di Nascita</th>
<th>Provincia</th>
</tr>
<dtml-in MetodiZSQL.Ricerca_per_Matricola(matricola=matricola)'>
<tr>
<td><dtml-var matricola></td>
<td><dtml-var cognome></td>
<td><dtml-var nome></td>
<td><dtml-var annodinascita></td>
<td><dtml-var provincia></td>
</tr>
</dtml-in>
</table>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>

I prossimi due metodi DTML sono quelli relativi alla cancellazione di uno studente in base al numero di matricola.

  • Cancella_Formè l’interfaccia in cui viene richiesto il numero di matricola per poi eseguire la cancellazione dalla base di dati.
  • Cancella_html è il metodo che richiama Cancella_Studente che esegue l’effettiva cancellazione dello studente dalla base di dati.

Cancella_Form
<dtml-var standard_html_header>
<center>
<h1>Cancella uno studente </h1>
</center>
<form action='Applicativi/MetodiDTML/Cancella_html' method=post>
<table width='100%'>
<tr>
<td>Matricola:</td>
<td><input type='text' name='matricola' size=6></td>
</tr>
<tr>
<td colspan=2><input type='submit' value='Cancella'></td>
</tr>
</table>
</form>
<dtml-var standard_html_footer>

Cancella_html

<dtml-var standard_html_header>
<center>
<h2>Studente cancellato</h2>
</center>
<br>
<dtml-call 'MetodiZSQL.Cancella_Studente(
matricola=_['matricola'])'>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>
<dtml-var standard_html_footer>

I prossimi due metodi DTML sono quelli relativi alla ricerca di uno degli esami sostenuti da uno studente. La ricerca è basata sul numero di matricola dello studente.

  • Giunzione_Form è l’interfaccia in cui viene richiesto il numero di matricola per poi eseguire la query sulla base di dati.
  • Giunzione_htmlè il metodo che richiama Giunzione e che restituisce tutti i campi richiesti.

Giunzione_Form
<table width='100%'>
<tr>
<center>
<h1> Ricerca degli esami sostenuti da uno studente </h1>
</tr>
</table>
<form action='Applicativi/MetodiDTML/Giunzione_html' method=post>
<tr>
<td>Matricola:</td>
<td><input type='text' name='Candidato' size=6></td>
</tr>
<td colspan=2>
<input type='submit' value='Cerca'></td>
</form>
</center>
<dtml-var standard_html_footer>

Giunzione_html
<dtml-var standard_html_header>
<center>
<h2>Risultato della ricerca</h2>
</center>
<table width='100%' border=2>
<tr>
<th>Matricola</th>
<th>Cognome</th>
<th>Materia</th>
<th>Voto</th>
<th>Lode</th>
</tr>
<dtml-in 'MetodiZSQL.Provagiunzione(Candidato=Candidato)'>
<tr>
<td><dtml-var matricola></td>
<td><dtml-var cognome></td>
<td><dtml-var materia></td>
<td><dtml-var voto></td>
<td><dtml-var lode></td>
</tr>
</dtml-in>
</table>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>
<dtml-var standard_html_footer>

Il metodo Index è invece il menu principale dal quale scegliere le operazioni da eseguire sulla base di dati.

Index_html
<center>
<h1>Menu principale</h1>
<p>
<h2>Base di dati Studenti - Esami </h2>
</center>
<p>
<br>
<a href='/StudentiEsami/Presentazioni/Aggiungi_Form'>
 Aggiungi un nuovo studente</a>
<p>
<a href='/StudentiEsami/Presentazioni/Cancella_Form'>
 Cancella studente</a>
<p>
<a href='/StudentiEsami/Presentazioni/RicercaForm_html'>
 Ricerca uno studente</a>
<p>
<a href='/StudentiEsami/Presentazioni/Giunzione_Form'>
 Visualizza esami di uno studente</a>
<p>
<br>
<dtml-var standard_html_footer>

Evoluzione di ZOPE e considerazioni personali.

Il principale obiettivo che si sono prefissati alla Digital Creations è quello di rendere sempre “più semplice” la vita agli sviluppatori di siti Web. ZOPE è un progetto che si è sviluppato nel corso di anni durante i quali sono venuti fuori diversi aspetti che saranno tenuti in considerazione nella realizzazione delle versioni più aggiornate:

  • Fornire un semplice modello di programmazione che permetta un rapido sviluppo e riutilizzo di oggetti.
  • Semplificare l’architettura di ZOPE riducendo quindi la difficoltà di apprendimento e implementare la documentazione.
  • Permettere ai vari progettisti di lavorare con prodotti familiari con i quali interagire.
  • Fornire un più potente sistema per la gestione del sistema potenziando il CMF (acronimo di Content Managment Framework)
  • ZOPE e totalmente open source e questo non cambierà. Chi utilizza ZOPE non è in ostaggio dei venditori: non costretto ad acquistare ogni settimana la versione aggiornata.

ZOPE vs WebObjects.

Sia Zope che WebObjects forniscono gli strumenti necessari alla creazione di applicazioni basate sulla tecnologia Web. Entrambi sono del tipo object-oriented.

Disponibilità:

ZOPE è un sistema open source eseguibile sotto diversi sistemi operativi. Lo si può scaricare gratuitamente dal sito assieme a molto altro materiale utile per lo sviluppo di applicazioni.

WebObjects è un prodotto in commercio che si può acquistare via internet all’indirizzo https://store.apple.com al costo di 699 US$.

Linguaggi:

ZOPE è scritto in Python ed utilizza il linguaggio DTML immerso nell’HTML per creare i propri metodi. Prevede l’impiego di script Python e Perl.

WebObjects è scritto in Java e in C. Utilizza HTML per creare le pagine Web e prevede l’impiego di script in Java.

Considerazioni finali.

Il fatto che ZOPE sia open source e che la portabilità delle applicazioni su varie piattaforme è molto semplice e funzionale, fa sì che questo prodotto abbia una rapida diffusione. Sono già diverse le società che utilizzano ZOPE.

Il modo con cui ZOPE permette la programmazione delle applicazioni fa sì che i tempi di realizzazione di queste siano contenuti. Gli strumenti che vengono forniti per il mantenimento di tali applicazioni ne fanno un prodotto piuttosto valido.

Durante lo studio di ZOPE, ho trovato un po’ forzato l’impiego di termini come: oggetto, metodo e stato anche se, in una visione molto larga, tali definizioni possono essere considerate accettabili.

Nello sviluppo dell’applicazione presentata, ho potuto sperimentare una maggiore efficienza di ZOPE con l’impiego del browser Web Netscape Navigator, piuttosto che Microsoft Explorer, soprattutto per la gestione delle finestre di Test e di autorizzazione dell’accesso al sistema da parte dell’amministratore. Ciò mi ha portato a pensare che ZOPE sia stato sviluppato principalmente con l’ausilio di Netscape vedendo in questo il principale strumento di impiego. Seppur marginali rispetto al funzionamento generale, le inefficienze riscontrate con l’impiego di Explorer sono evidenti e possibili cause di problemi più grossi.

Per quanto riguarda l’utilizzo di sistemi operativi diversi (ho provato ZOPE sia con Windows 98 che con Linux Red Hat 7.0) non ho riscontrato sostanziali differenze.

L’applicazione utilizza il DBMS Gadfly che, seppur sufficiente allo scopo preposto, presenta parecchie limitazioni. L’insieme dei comandi SQL a disposizione del programmatore è molto limitato: sono del tutto assenti alcuni dei comandi fondamentali, per esempio per la gestione delle chiavi primarie e delle chiavi esterne, nonché l’impossibilità di definire le proprietà degli attributi delle tabelle create.

Un secondo aspetto di ZOPE, non in ordine di importanza, è quello relativo alle sue capacità di gestione e di mantenimento delle applicazioni sul server (utilizzando lo Zserver). In questo articolo tale aspetto è stato solamente accennato e l’applicazione presentata, che descrive in minima parte le potenzialità ZOPE, non mostra questo secondo aspetto. La possibilità di creare portali e di mantenerli è il principale impiego di ZOPE.  

Durante la stesura di questo articolo il mio interesse e la mia curiosità per ZOPE sono aumentati, tanto da stimolarmi ad apprendere un linguaggio di scripting come Python, per sfruttare al meglio le potenzialità di questo application server



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1837
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved

Distribuie URL

Adauga cod HTML in site