TurboGears - Métodos HTTP

O protocolo Http é a base da comunicação de dados na rede mundial de computadores. Diferentes métodos de recuperação de dados do URL especificado são definidos neste protocolo. A tabela a seguir resume os diferentes métodos http -

Sr. Não. Métodos HTTP e descrição
1

GET

Envia dados de forma não criptografada para o servidor. Método mais comum.

2

HEAD

Igual a GET, mas sem corpo de resposta

3

POST

Usado para enviar dados de formulário HTML para o servidor. Os dados recebidos pelo método POST não são armazenados em cache pelo servidor.

4

PUT

Substitui todas as representações atuais do recurso de destino com o conteúdo carregado.

5

DELETE

Remove todas as representações atuais do recurso de destino fornecidas por um URL

Criação de um formulário HTML

Vamos criar um formulário HTML e enviar os dados do formulário para um URL. Salve o seguinte script como 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>

Os dados inseridos neste formulário devem ser enviados para ‘/login’ URL. Agora crie uma função de controladorloginpage() e expor a página html acima para ele.

@expose("hello.templates.login")
   def loginpage(self):
      return {}

Para receber os dados do formulário, forneça um login()controlador, que possui atributos de formulário como parâmetros. Aqui‘nm’ é o nome do campo de entrada de texto no formulário de login, o mesmo é usado como um parâmetro da função login ().

@expose("hello.templates.sample")
   def login(self, nm):
      name = nm
      return {'person':name}

Como pode ser visto, os dados recebidos do formulário de login estão sendo enviados para o template sample.html (usado anteriormente). É analisado por umGenshi template engine para gerar a seguinte saída -

Método POST

Quando o formulário HTML usa o método POST para enviar dados para o atributo URL in action, os dados do formulário não são expostos no URL. Os dados codificados são recebidos em umdictargumento pela função do controlador. O **kw o argumento abaixo é o objeto de dicionário que contém os dados.

O formulário HTML contém dois campos de texto de entrada.

<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>

o marks() o controlador recebe os dados do formulário e os envia para sample.htmlmodelo. Código pararoot.py é o seguinte -

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

Finalmente, o modelo sample.html é o seguinte -

<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>

Inicie o servidor (se ainda não estiver em execução)

Gearbox server –reload –debug

Entrar http://localhost::8080/marksform no navegador

o sample.html irá renderizar a seguinte saída -