Erste Schritte in der Python 2-Standardumgebung

In diesem Leitfaden wird beschrieben, wie Sie grundlegende Python 2.7-Anwendungen entwickeln und bereitstellen, die in der Google App Engine-Standardumgebung ausgeführt werden können. Dieser Leitfaden richtet sich an Nutzer, die mit Google App Engine, den zugehörigen Diensten und insbesondere mit der Verwendung von App Engine mit Python noch nicht vertraut sind. Deshalb sind die für jede Aufgabe enthaltenen Erklärungen ausführlicher als die Informationen in der Schnellstartanleitung.

Hinweis

Bevor Sie eine Anwendung entwickeln können:

  1. Erstellen Sie ein neues GCP Console-Projekt oder rufen Sie die Projekt-ID eines vorhandenen Projekts über die Google Cloud Platform Console ab:

    Seite "Projekte" aufrufen

  2. Installieren Sie das Google Cloud SDK und initialisieren Sie es.

Basisanwendung erstellen

In diesem Leitfaden wird das Flask-Framework für Webanwendungen verwendet, weil es einfach, benutzerfreundlich und erweiterbar ist. Sie können dieselben Prinzipien aber auch auf jedes andere Framework anwenden, das Sie verwenden möchten. Im Leitfaden wird Folgendes erläutert:

  • Das Erstellen eines einfachen Formulars für Nutzerkommentare, in dem die Inhalte angezeigt werden, die der Nutzer über das Formular in einer von Ihnen erstellten HTML-Vorlage übermittelt
  • Das Erstellen einer einfachen Anwendung, die statische Dateien wie CSS oder Bilder bereitstellt

Nachdem Sie die Entwicklungsumgebung eingerichtet haben, können Sie den Code für die Anwendung schreiben und in App Engine bereitstellen.

Grundstruktur eines Anwendungsprojekts

In diesem Leitfaden wird die folgende Struktur für das flask-app-Projekt verwendet:

flask-app-Projektstruktur

  • app.yaml: Zum Konfigurieren der Einstellungen Ihrer App Engine-Anwendung
  • main.py: Zum Schreiben der Inhalte Ihrer Anwendung
  • static: Verzeichnis zum Speichern Ihrer statischen Dateien
    • style.css: Einfaches Stylesheet, mit dem das Design Ihrer Vorlagendateien formatiert wird
  • templates: Verzeichnis für alle Ihre HTML-Vorlagen
    • form.html: HTML-Vorlage zum Anzeigen Ihres Formulars
    • submitted_form.html: HTML-Vorlage zum Anzeigen der Inhalte eines übermittelten Formulars

Bibliotheken für die Entwicklung einrichten

In dieser Anleitung wird eine Kopie der Flask-Bibliothek in das Verzeichnis Ihrer Anwendung kopiert. Die Python 2.7-Laufzeit von App Engine enthält eine gebündelte Flask-Bibliothek. Dabei handelt es sich jedoch um eine ältere Version, die in dieser Anleitung möglicherweise nicht funktioniert.

So richten Sie die erforderlichen Bibliotheken ein:

  1. Erstellen Sie eine Datei mit dem Namen appengine_config.py im Stammverzeichnis des Projekts. Wenn Sie die Anwendung bereitstellen, können Sie mit dieser Datei angeben, wo App Engine nach Bibliotheken von Drittanbietern suchen soll:

    from google.appengine.ext import vendor
    
    # Add any libraries installed in the "lib" folder.
    vendor.add('lib')
  2. Erstellen Sie eine Datei namens requirements.txt im Stammverzeichnis des Projekts:

    Flask==0.12.4
    Werkzeug<0.13.0,>=0.12.0
    
  3. Wenn Sie diese Anwendung auf einem lokalen Computer ausführen möchten, müssen Sie dafür eine Python-Entwicklungsumgebung mit Python, pip und virtualenv einrichten. Eine Anleitung dazu finden Sie unter Python-Entwicklungsumgebung einrichten für die Google Cloud Platform.

  4. Installieren Sie die Abhängigkeiten mit virtualenv:

    Mac OS/Linux

    1. Erstellen Sie eine isolierte Python-Umgebung in einem Verzeichnis außerhalb Ihres Projekts und aktivieren Sie diese:
      virtualenv env
      source env/bin/activate
      Am Ende der Anleitung können Sie virtualenv beenden, indem Sie deactivate eingeben.
    2. Gehen Sie zu Ihrem Projektverzeichnis und installieren Sie die Abhängigkeiten:
      cd YOUR_PROJECT
      pip install -t lib -r requirements.txt

    Windows

    Wenn Sie das Cloud SDK installiert haben, sollte Python 2.7 bereits installiert sein, in der Regel in C:\python27_x64\ (bei 64-Bit-Systemen). Führen Sie Ihre Python-Pakete mit PowerShell aus.

    1. Wechseln Sie zu Ihrer Installation von PowerShell.
    2. Klicken Sie mit der rechten Maustaste auf die Verknüpfung zu PowerShell und starten Sie diese als Administrator.
    3. Versuchen Sie, den Befehl python auszuführen. Wenn Python nicht gefunden wird, fügen Sie den Python-Ordner dem PATH Ihrer Umgebung hinzu.
      $env:Path += ";C:\python27_x64\"
    4. Erstellen Sie eine isolierte Python-Umgebung in einem Verzeichnis außerhalb Ihres Projekts und aktivieren Sie diese:
      python -m virtualenv env
      env\Scripts\activate
      Am Ende der Anleitung können Sie virtualenv beenden, indem Sie deactivate eingeben.
    5. Gehen Sie zu Ihrem Projektverzeichnis und installieren Sie die Abhängigkeiten:
      cd YOUR_PROJECT
      python -m pip install -t lib -r requirements.txt

    Das Flag -t lib kopiert die Bibliotheken in den Ordner lib, der während der Bereitstellung in App Engine hochgeladen wird. Weitere Informationen zum Kopieren von Bibliotheken von Drittanbietern finden Sie unter pip_requirements.txt mit kopierten Bibliotheken verwenden.

    Das Flag -r requirements.txt weist pip an, alles aus einer Datei requirements.txt zu installieren.

Datei app.yaml erstellen

Sie können die Einstellungen einer App Engine-Anwendung in der Datei app.yaml konfigurieren. Erstellen Sie diese Datei manuell oder im Rahmen der Erstellung Ihres Entwicklungsprojekts. Die Datei app.yaml ist eine Konfigurationsdatei, die App Engine mitteilt, wie die Anwendung ausgeführt wird und wie URLs statischen Dateien und Python-Modulen zugeordnet werden.

So erstellen Sie die Datei app.yaml:

  1. Erstellen Sie eine Datei namens app.yaml im Stammverzeichnis Ihres Projekts.
  2. Fügen Sie der Datei die folgenden Zeilen hinzu:

    runtime: python27
    api_version: 1
    threadsafe: true
    
    libraries:
    - name: ssl
      version: latest
    
    handlers:
    - url: /static
      static_dir: static
    - url: /.*
      script: main.app
    

Weitere Informationen zur Datei app.yaml finden Sie in der Referenzdokumentation zu app.yaml.

Anfrage-Handler für eine Flask-Anwendung erstellen

Wenn App Engine eine Webanfrage für Ihre Anwendung empfängt, wird gemäß der Beschreibung in der app.yaml-Konfigurationsdatei der Anwendung das Handler-Skript aufgerufen, das der URL entspricht. Die Python 2.7-Laufzeit unterstützt den WSGI-Standard. WSGI wird bevorzugt und ist für einige Funktionen von Python 2.7 erforderlich. Die Konfiguration der Skript-Handler Ihrer Anwendung bestimmt, ob eine Anfrage mit WSGI verarbeitet wird.

Durch einen Vergleich der URL der Anfrage mit den URL-Mustern in der Konfigurationsdatei der Anwendung ermittelt der Server, welches Python-Anwendungsobjekt aufgerufen werden soll. Anschließend wird das Anwendungsobjekt mit den im WSGI-Standard definierten Argumenten aufgerufen. Das Anwendungsobjekt führt je nach Anfrage die entsprechenden Aktionen durch, bereitet dann eine Antwort vor und gibt sie als eine Liste von Strings zurück.

Die folgenden Anfrage-Handler übertragen die mit dem Formular übermittelten Informationen in der Datei /templates/form.html in die Vorlagendatei /templates/submitted_form.html:

  1. Erstellen Sie eine neue Datei namens main.py im Stammverzeichnis Ihrer Anwendung.

  2. Importieren Sie das Flask-Framework und die Flask-Schnittstellen, die Sie verwenden möchten:

    from flask import Flask, render_template, request
  3. Fügen Sie diese Zeile hinzu, um eine Instanz der Flask-Klasse zu erstellen und einer Variablen mit dem Namen app zuzuweisen:

    app = Flask(__name__)
  4. Erstellen Sie einen Anfrage-Handler, der ein Formular mit der Vorlage form.html anzeigt:

    @app.route('/form')
    def form():
        return render_template('form.html')

    Wenn der Nutzer in der Anwendung zum Verzeichnis /form/ navigiert, wird die Vorlage form.html angezeigt, die Sie noch erstellen.

  5. Erstellen Sie einen Anfrage-Handler, der die Informationen aus dem übermittelten Formular verarbeitet:

    @app.route('/submitted', methods=['POST'])
    def submitted_form():
        name = request.form['name']
        email = request.form['email']
        site = request.form['site_url']
        comments = request.form['comments']
    

    Die Anwendung speichert die Formularinformationen in den Variablen, die Sie hier erstellt haben. Mit diesen Variablen können Sie die Daten aus dem Formular in die Vorlage submitted_form.html einfügen, die Sie noch erstellen.

Weitere Informationen zur schnellen Einrichtung von Flask finden Sie in der Schnellstartanleitung zu Flask.

Sie können die Funktionalität dieses Formulars problemlos erweitern. So haben Sie beispielsweise die Möglichkeit, Mail API, Mailgun, Mailjet oder SendGrid zu verwenden, um von Nutzern übermittelte Kommentare an sich selbst oder an andere zu senden.

Jinja2-Vorlagen einrichten

Da in Code eingebettetes HTML schwierig zu verwalten sein kann, sollten Sie ein Vorlagensystem verwenden, bei dem HTML in einer separaten Datei mit einer speziellen Syntax gespeichert wird, um anzugeben, wo die von einer Anwendung zurückgegebenen Daten angezeigt werden. Sie können die Vorlagen-Engine Ihrer Wahl verwenden, indem Sie sie mit Ihrem Anwendungscode bündeln. App Engine enthält die Vorlagen-Engines Django und Jinja2, um Ihnen die Arbeit zu erleichtern.

  1. Fügen Sie am Ende der Funktion submitted_form() die folgende Zeile hinzu:

    return render_template(
        'submitted_form.html',
        name=name,
        email=email,
        site=site,
        comments=comments)

    Diese Zeile verwendet die Schnittstelle render_template(), um die Vorlage submitted_form.html mit übermittelten Formularinformationen zu erzeugen.

  2. Erstellen Sie die Vorlagen form.html und submitted_form.html:

    1. Erstellen Sie einen neuen Ordner namens templates in Ihrem Stammverzeichnis:

      mkdir templates
      
    2. Erstellen Sie form.html im templates-Verzeichnis Ihres Projekts:

      <html>
        <head>
          <title>Submit a form</title>
         <link rel="stylesheet" type="text/css" href="/static/style.css">
        </head>
        <body>
          <div id="container">
            <div class="pagetitle">
              <h1>Submit a form</h1>
            </div>
            <div id="main">
              <form method="post" action="{{ url_for('submitted_form') }}">
                <label for="name">Name:</label>
                <input type="text" name="name"><br />
                <label for="email">Email address:</label>
                <input type="email" name="email"><br />
                <label for="site_url">Website URL:</label>
                <input type="url" name="site_url"><br />
                <label for="comments">Comments:</label>
                <textarea name="comments"></textarea><br />
                <input type="submit">
              </form>
            </div>
          </div>
        </body>
      </html>
      
    3. Erstellen Sie submitted_form.html im templates-Verzeichnis Ihres Projekts:

      <html>
       <head>
         <title>Submitted form</title>
         <link rel="stylesheet" type="text/css" href="/static/style.css">
       </head>
       <body>
         <div id="container">
           <div class="pagetitle">
             <h1>Form submitted</h1>
           </div>
           <div id="main">
             <p>Thanks for your submission, {{name}}!</p>
             <p>Here's a review of the information that you sent:</p>
             <p>
                <strong>Name</strong>: {{name}} <br>
                <strong>Email</strong>: {{email}} <br>
                <strong>Website URL</strong>: {{site}} <br>
                <strong>Comments</strong>: {{comments}}
             </p>
           </div>
         </div>
       </body>
      </html>
      

Weitere Informationen zur Verwendung von Vorlagen mit Flask und Jinja2 finden Sie in der offiziellen Flask-Dokumentation.

Statische Dateien bereitstellen

Die Bereitstellung statischer Dateien ist effizienter, wenn es sich um Inhalte wie Bilder, CSS oder Flash-Animationen handelt, die nicht dynamisch erzeugt werden, wenn eine Seite angefordert wird.

Erstellen Sie eine CSS-Datei und einen zugehörigen Handler:

  1. Erstellen Sie in Ihrem Stammverzeichnis einen neuen Ordner mit dem Namen static:

    mkdir static
    
  2. Erstellen Sie die Datei style.css, mit der Sie das Design der soeben erstellten Vorlagendateien ändern können. Erstellen Sie die Datei im Ordner static Ihres Projekts und fügen Sie den folgenden Stil hinzu:

    .pagetitle {
        color: #800080;
    }
    
  3. In der Datei app.yaml, die Sie zuvor erstellt haben, werden die static-Verzeichnisse angegeben, die statische Dateien enthalten:

    handlers:
    - url: /static
      static_dir: static
    - url: /.*
      script: main.app

    Im Abschnitt handlers werden zwei Handler für URLs definiert. Wenn App Engine eine Anfrage für eine URL erhält, die mit /static beginnt, wird der Rest des Pfads den Dateien im static-Verzeichnis zugeordnet. Wird eine entsprechende Datei gefunden, werden die Inhalte der Datei an den Client zurückgegeben.

Weitere Informationen zu URL-Zuordnungen und anderen Optionen, die Sie in app.yaml festlegen können, finden Sie in der Referenz zu app.yaml.

Anwendung testen

Testen Sie die Anwendung mithilfe des lokalen Entwicklungsservers (dev_appserver.py), der im SDK enthalten ist.

  1. Starten Sie innerhalb des Stammverzeichnisses, in dem sich die Konfigurationsdatei app.yaml der Anwendung befindet, mit dem folgenden Befehl den lokalen Entwicklungsserver:

    dev_appserver.py app.yaml
    

    Der lokale Entwicklungsserver wird jetzt ausgeführt und überwacht Port 8080 auf Anfragen.

    Ist ein Problem aufgetreten?

    1. Rufen Sie http://localhost:8080/form in Ihrem Webbrowser auf, um die Anwendung zu öffnen.

Lokalen Entwicklungsserver (dev_appserver.py) ausführen

Wenn Sie den lokalen Entwicklungsserver ausführen möchten, können Sie entweder dev_appserver.py durch Angabe des vollständigen Verzeichnispfads ausführen oder dev_appserver.py zu Ihrer Umgebungsvariablen PATH hinzufügen:

  • Wenn Sie das ursprüngliche App Engine SDK installiert haben, befindet sich das Tool unter:

    [PATH_TO_APP_ENGINE_SDK]/dev_appserver.py
    
  • Wenn Sie das Google Cloud SDK installiert haben, befindet sich das Tool unter:

    [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
    

    Tipp: Wenn Sie die Google Cloud SDK-Tools zu Ihrer PATH-Umgebungsvariablen hinzufügen und die Befehlsvervollständigung in Ihrer Shell aktivieren möchten, können Sie Folgendes ausführen:

    [PATH_TO_CLOUD_SDK]/google-cloud-sdk/install.sh
    

Weitere Informationen zum Ausführen des lokalen Entwicklungsservers und zum Ändern der Portnummer finden Sie in der Referenz zum lokalen Entwicklungsserver.

Änderung vornehmen

Der Entwicklungsserver kann ausgeführt werden, während Sie Ihre Anwendung entwickeln. Er überwacht Ihre Quelldateien auf Änderungen und lädt sie bei Bedarf neu.

  1. Probieren Sie es aus: Öffnen Sie templates/form.html und ändern Sie den Text Submit a form zwischen den <h1>-Tags in einen beliebigen anderen Text, während der lokale Entwicklungsserver ausgeführt wird.
  2. Laden Sie http://localhost:8080/form neu, um die Ergebnisse zu sehen.

Anwendung bereitstellen

Führen Sie zum Hochladen der Anwendung den folgenden Befehl im Stammverzeichnis Ihres Projekts aus, in dem sich die Datei app.yaml befindet:

gcloud app deploy

Optionale Flags:

  • Verwenden Sie das Flag --project, um eine andere GCP Console-Projekt-ID als jene anzugeben, die Sie im gcloud-Tool als Standard initialisiert haben. Beispiel: --project [YOUR_PROJECT_ID]
  • Verwenden Sie das Flag -v, um eine Versions-ID festzulegen, andernfalls wird eine neue erstellt. Beispiel: -v [YOUR_VERSION_ID]

Weitere Informationen zum Bereitstellen der Anwendung über die Befehlszeile finden Sie unter Python-Anwendung bereitstellen.

Anwendung ansehen

Öffnen Sie Ihren Browser und rufen Sie die Anwendung unter http://[YOUR_PROJECT_ID].appspot.com/form auf.

Support

Wenn Sie bei der Entwicklung der Anwendung auf Probleme stoßen, können Sie Hilfe vom technischen Support und in den Entwickler-Communities anfordern.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

App Engine-Standardumgebung für Python 2