My favorites | Português | Sign in

Tratamento de formulários com o webapp

Para permitir que os usuários postem suas próprias saudações, temos que conseguir processar as informações enviadas pelos usuários por meio de um formulário da web. A estrutura do webapp facilita o processamento de dados de formulário.

Tratamento de formulários da web com o webapp

Substitua o conteúdo de helloworld/helloworld.py pelo seguinte:

import cgi

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.out.write("""
      <html>
        <body>
          <form action="/sign" method="post">
            <div><textarea name="content" rows="3" cols="60"></textarea></div>
            <div><input type="submit" value="Sign Guestbook"></div>
          </form>
        </body>
      </html>""")


class Guestbook(webapp.RequestHandler):
  def post(self):
    self.response.out.write('<html><body>You wrote:<pre>')
    self.response.out.write(cgi.escape(self.request.get('content')))
    self.response.out.write('</pre></body></html>')

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/sign', Guestbook)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

Recarregue a página para ver o formulário e tente enviar uma mensagem.

Esta versão possui dois manipuladores: MainPage, mapeado para o URL /, exibe um formulário da web. Guestbook, mapeado para o URL /sign, exibe os dados enviados pelo formulário da web.

O manipulador Guestbook possui o método post() em vez do método get(). Isso ocorre porque o formulário exibido por MainPage usa o método HTTP POST (method="post") para enviar os dados do formulário. Se por algum motivo for necessário um único manipulador para tratar ações GET e POST com o mesmo URL, você pode definir um método para cada ação na mesma classe.

O código do método post() obtém os dados do formulário de self.request. Antes de exibi-los de volta ao usuário, ele usa cgi.escape() para adicionar códigos de escape aos caracteres especiais de HTML aos seus equivalentes de entidade de caractere. cgi é um módulo da biblioteca Python padrão. Consulte a documentação do cgi para obter mais informações.

Nota: O ambiente do Google App Engine inclui a biblioteca Python 2.5 padrão inteira. Entretanto, nem todas as ações são permitidas. Os aplicativos do Google App Engine são executados em um ambiente restrito, que permite que o Google App Engine os adéqüe com segurança. Por exemplo, não são permitidas chamadas de baixo nível ao sistema operacional, operações de rede e algumas operações do sistema de arquivos. Nesses casos, é retornado um erro. Para obter mais informações, consulte O ambiente de execução do Python.

Próximo passo...

Agora que podemos coletar informações do usuário, necessitamos de um lugar para armazená-las e de uma maneira de recuperá-las.

Vá para Uso do armazenamento de dados.