Maneja las entradas de usuarios en un formulario

Esta parte de la explicación del código del libro de visitas de Python muestra cómo manejar las entradas de los usuarios.

Esta página forma parte de un instructivo de varias páginas. Para comenzar desde el principio y ver las instrucciones de configuración, ve a Cómo crear un libro de visitas.

Configura la aplicación para utilizar webapp2

La muestra del libro de visitas utiliza el marco de trabajo webapp2, que se incluye en el entorno de App Engine y el SDK de Python en App Engine. No necesitas empaquetar webapp2 con el código de tu aplicación para usarlo.

El archivo app.yaml especifica que la app usa el framework webapp2:

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

Una aplicación webapp2 posee dos partes:

  • Una o más clases de RequestHandler que procesan solicitudes y compilan respuestas.
  • Una instancia WSGIApplication que enruta solicitudes entrantes a los controladores en función de la URL.

El archivo app.yaml especifica el objeto app en guestbook.py como el controlador para todas las URL:

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

- url: /bootstrap
  static_dir: bootstrap

- url: /.*
  script: guestbook.app

Cómo definir un controlador para muestra de formulario

El objeto app en guestbook.py es un WSGIApplication que define qué secuencias de comandos controlan las solicitudes para determinadas URL.

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

El parámetro debug=True le indica a webapp2 que imprima seguimientos de pila en el resultado del navegador si un controlador encuentra un error o genera una excepción no detectada. Esta opción se debe quitar antes de implementar la versión final de tu aplicación; caso contrario, expondrás inadvertidamente los componentes internos de tu aplicación.

El controlador Guestbook tiene un método post() en lugar de un método get(). Esto se debe a que el formulario que muestra MainPage usa el método HTTP POST para enviar los datos del formulario.

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

El método post() obtiene los datos del formulario desde self.request.