Como manipular dados inseridos pelo usuário em um formulário

Nesta parte das instruções do código do livro de visitas do Python, veja como processar a entrada do usuário.

Esta página faz parte de um tutorial com várias páginas. Para começar do início e ver as instruções de configuração, acesse Como criar um livro de visitas.

Como configurar o app para usar webapp2

A amostra do livro de visitas usa o framework webapp2, incluído no ambiente do App Engine, e o SDK do App Engine para Python (link em inglês). Não é necessário agrupar o webapp2 com o código do aplicativo para usá-lo.

O arquivo app.yaml especifica que o app usa a biblioteca webapp2:

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest

Um aplicativo webapp2 tem duas partes:

  • uma ou mais classes RequestHandler que processam solicitações e criam respostas
  • uma instância WSGIApplication que encaminha solicitações de entrada para gerenciadores baseados no URL

O arquivo app.yaml especifica o objeto app em guestbook.py como o gerenciador de todos os URLs:

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /bootstrap
  static_dir: bootstrap

- url: /.*
  script: guestbook.app

Como definir um gerenciador para envio de formulário

O objeto app em guestbook.py é um WSGIApplication que define quais scripts processam solicitações para determinados URLs.

app = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/sign', Guestbook),
], debug=True)

O parâmetro debug=True solicita a webapp2 imprimir traces de pilha na saída do navegador caso um gerenciador encontre um erro ou acione uma exceção não identificada. Essa opção precisará ser removida antes de implantar a versão final do aplicativo. Do contrário, você vai expor inadvertidamente os componentes internos do aplicativo.

O gerenciador Guestbook tem um método post() em vez de um método get(). Isso acontece porque o formulário exibido por MainPage usa o método HTTP POST para enviar os dados do formulário.

class Guestbook(webapp2.RequestHandler):

    def post(self):
        # We set the same parent key on the 'Greeting' to ensure each
        # Greeting is in the same entity group. Queries across the
        # single entity group will be consistent. However, the write
        # rate to a single entity group should be limited to
        # ~1/second.
        guestbook_name = self.request.get('guestbook_name',
                                          DEFAULT_GUESTBOOK_NAME)
        greeting = Greeting(parent=guestbook_key(guestbook_name))

        if users.get_current_user():
            greeting.author = Author(
                    identity=users.get_current_user().user_id(),
                    email=users.get_current_user().email())

        greeting.content = self.request.get('content')
        greeting.put()

        query_params = {'guestbook_name': guestbook_name}
        self.redirect('/?' + urllib.urlencode(query_params))

O método post() recebe os dados do formulário de self.request.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Python 2