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 -