CherryPy - Un'applicazione funzionante
Le applicazioni full stack forniscono una funzione per creare una nuova applicazione tramite un comando o l'esecuzione del file.
Considera le applicazioni Python come il framework web2py; l'intero progetto / applicazione è creato in termini di framework MVC. Allo stesso modo, CherryPy consente all'utente di impostare e configurare il layout del codice secondo le proprie esigenze.
In questo capitolo impareremo in dettaglio come creare l'applicazione CherryPy ed eseguirla.
File System
Il file system dell'applicazione è mostrato nella seguente schermata:
Ecco una breve descrizione dei vari file che abbiamo nel file system:
config.py- Ogni applicazione necessita di un file di configurazione e di un modo per caricarlo. Questa funzionalità può essere definita in config.py.
controllers.py- MVC è un modello di progettazione popolare seguito dagli utenti. Il controller.py è dove vengono implementati tutti gli oggetti che verranno montati su cherrypy.tree .
models.py - Questo file interagisce direttamente con il database per alcuni servizi o per la memorizzazione di dati persistenti.
server.py - Questo file interagisce con il server Web pronto per la produzione che funziona correttamente con il proxy di bilanciamento del carico.
Static - Include tutti i file CSS e di immagine.
Views - Include tutti i file modello per una determinata applicazione.
Esempio
Impariamo in dettaglio i passaggi per creare un'applicazione CherryPy.
Step 1 - Creare un'applicazione che dovrebbe contenere l'applicazione.
Step 2- All'interno della directory, crea un pacchetto python corrispondente al progetto. Crea la directory gedit e includi il file _init_.py nella stessa.
Step 3 - All'interno del pacchetto, includi il file controllers.py con il seguente contenuto:
#!/usr/bin/env python
import cherrypy
class Root(object):
def __init__(self, data):
self.data = data
@cherrypy.expose
def index(self):
return 'Hi! Welcome to your application'
def main(filename):
data = {} # will be replaced with proper functionality later
# configuration file
cherrypy.config.update({
'tools.encode.on': True, 'tools.encode.encoding': 'utf-8',
'tools.decode.on': True,
'tools.trailing_slash.on': True,
'tools.staticdir.root': os.path.abspath(os.path.dirname(__file__)),
})
cherrypy.quickstart(Root(data), '/', {
'/media': {
'tools.staticdir.on': True,
'tools.staticdir.dir': 'static'
}
})
if __name__ == '__main__':
main(sys.argv[1])
Step 4- Considera un'applicazione in cui l'utente inserisce il valore tramite un modulo. Includiamo due moduli: index.html e submit.html nell'applicazione.
Step 5 - Nel codice sopra per i controller, abbiamo index(), che è una funzione predefinita e viene caricata per prima se viene chiamato un determinato controller.
Step 6 - L'implementazione del index() il metodo può essere modificato nel modo seguente:
@cherrypy.expose
def index(self):
tmpl = loader.load('index.html')
return tmpl.generate(title='Sample').render('html', doctype='html')
Step 7- Questo caricherà index.html all'avvio dell'applicazione data e lo indirizzerà al flusso di output specificato. Il file index.html è il seguente:
index.html
<!DOCTYPE html >
<html>
<head>
<title>Sample</title>
</head>
<body class = "index">
<div id = "header">
<h1>Sample Application</h1>
</div>
<p>Welcome!</p>
<div id = "footer">
<hr>
</div>
</body>
</html>
Step 8 - È importante aggiungere un metodo alla classe Root in controller.py se vuoi creare un modulo che accetti valori come nomi e titoli.
@cherrypy.expose
def submit(self, cancel = False, **value):
if cherrypy.request.method == 'POST':
if cancel:
raise cherrypy.HTTPRedirect('/') # to cancel the action
link = Link(**value)
self.data[link.id] = link
raise cherrypy.HTTPRedirect('/')
tmp = loader.load('submit.html')
streamValue = tmp.generate()
return streamValue.render('html', doctype='html')
Step 9 - Il codice da includere in submit.html è il seguente -
<!DOCTYPE html>
<head>
<title>Input the new link</title>
</head>
<body class = "submit">
<div id = " header">
<h1>Submit new link</h1>
</div>
<form action = "" method = "post">
<table summary = "">
<tr>
<th><label for = " username">Your name:</label></th>
<td><input type = " text" id = " username" name = " username" /></td>
</tr>
<tr>
<th><label for = " url">Link URL:</label></th>
<td><input type = " text" id=" url" name= " url" /></td>
</tr>
<tr>
<th><label for = " title">Title:</label></th>
<td><input type = " text" name = " title" /></td>
</tr>
<tr>
<td></td>
<td>
<input type = " submit" value = " Submit" />
<input type = " submit" name = " cancel" value = "Cancel" />
</td>
</tr>
</table>
</form>
<div id = "footer">
</div>
</body>
</html>
Step 10 - Riceverai il seguente output -
Qui, il nome del metodo è definito come "POST". È sempre importante effettuare una verifica incrociata del metodo specificato nel file. Se il metodo include il metodo "POST", i valori devono essere ricontrollati nel database nei campi appropriati.
Se il metodo include il metodo "GET", i valori da salvare saranno visibili nell'URL.