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 -