Se avete in programma lo sviluppo di un grosso sito, comprenderete la necessità di suddividere il codice
in diversi moduli.
Ci sono due modi per farlo:
- Nel primo i moduli sono completamente indipendenti. In questo caso dovrete solo creare i vostri file
(per esempio: Hello1.cpy, Hello2.cpy and Hello3.cpy) e compilarli insieme usando:
python ../cherrypy.py Hello1.cpy Hello2.cpy Hello3.cpy
Notate che l'eseguibile generato da CherryPy sarà chiamato Hello1Server.py
- Nell'altro caso un modulo è necessario agli altri (per esempio uno è una libreria usata dagli altri).
In questo caso tutto ciò di cui avrete bisogno è la parola chiave use module
sulla prima riga del file, che è l'equivalente di una dichiarazione import in Python.
Per esempio:
***** File BoldTime.cpy: *****
import time
CherryClass BoldTime:
view:
def getBoldTime(self):
# Display the time in bold
return "<b>%s</b>"%time.time()
***** File Hello.cpy: *****
use BoldTime
CherryClass Root:
view:
def index(self):
return "<html><body>Hello, time is %s</body></hello>"%boldTime.getBoldTime()
Per compilare uqesto esempio basta:
python ../cherrypy.py Hello.cpy
Cinque cose da notare:
- La dichiarazione use DEVE essere la prima riga del file (non mettete alcun commento prima).
- CherryPy creerà automaticamente una lista di dipendenze e leggerà i file i ordine generando l'eseguibile
di conseguenza. Se create un ciclo di dipendenze, CherryPy andrà in errore.
- Il nome di una CherryClass è BoldTime (con il carattere B in lettere maiuscole).
Così deve essere il nome del file e il nome da usare nella dichiarazione use.
Ma quando chiamate boldTime.getBoldTime, deve essere usata la b minuscola,
altrimenti si riferisce all'istanza della classe che è stata automaticamente creata.
- Potete anche usare la dichiarazione Python import. (Sia
import ...
che from ... import ...
)
- Se avete un certo numero di moduli da includere in use, potete dividere la dichiarazione "use"
su diverse righe (ma devono sempre essere nelle prime righe del file).
Per esempio, possiamo usare:
****** File Root.cpy: *****
use HttpAuthenticate, CookieAuthenticate
use Mail, MaskTools
CherryClass Root:
mask:
def index(self):
OK
E se i moduli non sono nella stessa directory?
Allora dobbiamo usare l'opzione -I per compilare i file. Questo vi permette di specificare
le directory dove CherryPy deve ricercare i file di input. Per esempio se abbiamo i seguenti file:
/dir1/Module1.cpy
/dir2/Module2.cpy
Hello.cpy (uses Module1 and Module2)
Dovremo compilare Hello.cpy usando:
python ../cherrypy.py -I /dir1 -I /dir2 Hello.cpy
Di default, CherryPy cercherà in ., ../lib e ../src
E' possibile anche settare una variabile ambiente chiamata CHERRYPY_HOME che contiene i nomi
delle directory dove CherryPy è installato.
In questo caso, CherryPy cercherà i moduli in CHERRYPY_HOME/lib e CHERRYPY_HOME/src.
Nei prossimi capitoli, impareremo come usare alcuni dei moduli delle librerie standard di CherryPy.
See About this document... for information on suggesting changes.