TurboGears - Metodi HTTP
Il protocollo HTTP è il fondamento della comunicazione dati nel world wide web. In questo protocollo vengono definiti diversi metodi di recupero dei dati dall'URL specificato. La tabella seguente riassume i diversi metodi http:
Sr.No. | Metodi e descrizione HTTP |
---|---|
1 | GET Invia i dati in forma non crittografata al server. Metodo più comune. |
2 | HEAD Uguale a GET, ma senza corpo di risposta |
3 | POST Utilizzato per inviare i dati del modulo HTML al server. I dati ricevuti dal metodo POST non vengono memorizzati nella cache dal server. |
4 | PUT Sostituisce tutte le rappresentazioni correnti della risorsa di destinazione con il contenuto caricato. |
5 | DELETE Rimuove tutte le rappresentazioni correnti della risorsa di destinazione fornita da un URL |
Creazione di un modulo HTML
Creiamo un modulo HTML e inviamo i dati del modulo a un URL. Salva il seguente script come login.html
<html>
<body>
<form action = "http://localhost:8080/login" method = "get">
<p>Enter Name:</p>
<p><input type = "text" name = "nm" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>
I dati inseriti in questo modulo devono essere inviati a ‘/login’ URL. Ora crea una funzione controllerloginpage() ed esporre ad esso la pagina html sopra.
@expose("hello.templates.login")
def loginpage(self):
return {}
Per ricevere i dati del modulo, fornire un login()controller, che ha attributi del modulo come parametri. Qui‘nm’ è il nome del campo di immissione del testo nel modulo di login, lo stesso viene utilizzato come parametro della funzione login ().
@expose("hello.templates.sample")
def login(self, nm):
name = nm
return {'person':name}
Come si può vedere, i dati ricevuti dal form di login vengono inviati al template sample.html (usato in precedenza). Viene analizzato da aGenshi template engine per generare il seguente output -
Metodo POST
Quando il modulo HTML utilizza il metodo POST per inviare i dati all'URL nell'attributo di azione, i dati del modulo non vengono esposti nell'URL. I dati codificati vengono ricevuti in un filedictargomento dalla funzione controller. Il **kw l'argomento seguente è l'oggetto dizionario che contiene i dati.
Il modulo HTML contiene due campi di testo di input.
<html>
<body>
<form action = "http://localhost:8080/marks" method = "post">
<p>Marks in Physics:</p>
<p><input type = "text" name = "phy" /></p>
<p>Marks in Maths:</p>
<p><input type = "text" name = "maths" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>
Il marks() il controller riceve i dati del modulo e li invia a sample.htmlmodello. Codice perroot.py è il seguente -
from hello.lib.base import BaseController
from tg import expose, request
class RootController(BaseController):
@expose("hello.templates.marks")
def marksform(self):
return {}
@expose("hello.templates.sample")
def marks(self, **kw):
phy = kw['phy']
maths = kw['maths']
ttl = int(phy)+int(maths)
mydata = {'phy':phy, 'maths':maths, 'total':ttl}
return mydata
Infine, il modello sample.html è il seguente:
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h2>Hello, Welcome to TurboGears!.</h2>
<h3>Marks in Physics: ${phy}.</h3>
<h3>Marks in Maths: ${maths}.</h3>
<h3>Total Marks: ${total}</h3>
</body>
</html>
Avvia il server (se non è già in esecuzione)
Gearbox server –reload –debug
accedere http://localhost::8080/marksform nel browser
Il sample.html renderà il seguente output -