Gérer les saisies utilisateur dans un formulaire


Cette partie du tutoriel consacré au code de l'application Guestbook pour Python montre comment gérer les entrées utilisateur.

Ce tutoriel comporte plusieurs pages. Pour le suivre depuis le début et consulter les instructions relatives à la configuration, consultez la page Créer un livre d'or.

Configurer l'application pour utiliser webapp2

L'exemple Guestbook utilise le framework webapp2, inclus dans l'environnement App Engine et le SDK App Engine pour Python. Vous n'avez pas besoin de grouper webapp2 avec votre code d'application pour l'utiliser.

Le fichier app.yaml spécifie que l'application utilise le framework webapp2 :

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

Une application webapp2 se compose de deux parties :

  • Une ou plusieurs classes RequestHandler qui traitent les requêtes et génèrent les réponses.
  • une instance de WSGIApplication qui achemine les requêtes entrantes vers des gestionnaires en fonction de l'URL.

Le fichier app.yaml spécifie l'objet app dans guestbook.py en tant que gestionnaire pour toutes les URL :

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

- url: /bootstrap
  static_dir: bootstrap

- url: /.*
  script: guestbook.app

Définir un gestionnaire pour l'envoi de formulaires

L'objet app dans guestbook.py est une WSGIApplication définissant les scripts qui gèrent les requêtes pour des URL données.

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

Le paramètre debug=True indique à webapp2 d'imprimer les traces de la pile dans le résultat du navigateur lorsqu'un gestionnaire rencontre une erreur ou génère une exception non détectée. Cette option doit être supprimée avant le déploiement de la version finale de votre application, au risque d'exposer par inadvertance les éléments internes de votre application.

Le gestionnaire Guestbook comprend une méthode post(), à la place de la méthode get(). En effet, le formulaire affiché par MainPage utilise la méthode HTTP POST pour soumettre les données du formulaire.

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

La méthode post() récupère les données du formulaire à partir de self.request.