Nutzereingaben in Formular bearbeiten

In diesem Teil der Anleitung zum Python-Gästebuch-Code wird gezeigt, wie Nutzereingaben gehandhabt werden.

Diese Seite ist Teil einer mehrseitigen Anleitung. Lesen Sie Gästebuchanwendungen erstellen, um von Anfang an zu beginnen und eine Anleitung zum Einrichten zu erhalten.

App für die Verwendung von webapp2 konfigurieren

Im Gästebuchbeispiel wird das Framework webapp2 verwendet, das in der App Engine-Umgebung und im App Engine Python SDK enthalten ist. Sie müssen webapp2 und Ihren Anwendungscode nicht bündeln, um das Framework zu verwenden.

Die Datei app.yaml gibt an, dass die Anwendung das Framework webapp2 verwendet:

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

Eine webapp2-Anwendung besteht aus zwei Teilen:

  • Mindestens eine RequestHandler-Klasse, die Anfragen verarbeitet und Antworten erstellt.
  • Eine WSGIApplication-Instanz, die auf Basis der URL eingehende Anfragen an Handler weiterleitet.

Die app.yaml-Datei gibt das app-Objekt in guestbook.py als Handler für alle URLs an:

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

- url: /bootstrap
  static_dir: bootstrap

- url: /.*
  script: guestbook.app

Handler für die Formularübergabe definieren

Das app-Objekt in guestbook.py ist ein WSGIApplication-Objekt, das definiert, welche Skripts Anfragen für bestimmte URLs verarbeiten.

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

Der Parameter debug=True weist webapp2 an, Stacktraces in der Browserausgabe auszugeben, wenn ein Handler einen Fehler oder eine nicht abgefangene Ausnahme auslöst. Diese Option sollte vor der Bereitstellung der endgültigen Version Ihrer Anwendung entfernt werden, da Sie sonst versehentlich die Interna Ihrer Anwendung verfügbar machen.

Der Guestbook-Handler nutzt anstelle der Methode post() die Methode get(). Dies liegt daran, dass das von MainPage angezeigte Formular die Methode HTTP POST zum Übermitteln der Formulardaten verwendet.

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

Die post()-Methode erhält die Formulardaten von self.request.