Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Sitzungen mit Cloud Firestore verarbeiten

Viele Anwendungen benötigen eine Sitzungsverarbeitung zur Authentifizierung und für Nutzereinstellungen. Das Flask-Framework enthält eine speicherbasierte Implementierung, um diese Funktion auszuführen. Diese Implementierung eignet sich jedoch nicht für eine Anwendung, die über mehrere Instanzen bereitgestellt werden kann, da sich die Sitzung, die in einer bestimmten Instanz aufgezeichnet wird, von Sitzungen in anderen Instanzen unterscheiden kann. In dieser Anleitung wird gezeigt, wie Sitzungen in App Engine verarbeitet werden.

Lernziele

  • Anwendung schreiben
  • Anwendung lokal ausführen
  • Anwendung in App Engine bereitstellen

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Aktivieren Sie die Firestore API.

    Aktivieren Sie die API

  5. Installieren und initialisieren Sie das Cloud SDK.
  6. Installieren Sie Python, pip und virtualenv auf Ihrem System. Eine Anleitung finden Sie unter Python-Entwicklungsumgebung für Google Cloud einrichten.

Projekt einrichten

  1. Beginnen Sie im Terminalfenster in einem Verzeichnis Ihrer Wahl und erstellen Sie ein neues Verzeichnis mit dem Namen sessions. Der gesamte Code für diese Anleitung befindet sich im Verzeichnis sessions.

  2. Wechseln Sie in das Verzeichnis sessions:

    cd sessions
    
  3. Erstellen Sie requirements.txt mit folgendem Inhalt:

    google-cloud-firestore==2.0.2
    flask==1.1.2
    
  4. Installieren Sie die Abhängigkeiten:

    pip install  -r requirements.txt
    

Am Ende dieser Anleitung sieht die endgültige Dateistruktur etwa so aus:

sessions
├── app.yaml
├── main.py
└── requirements.txt

Webanwendung schreiben

In dieser Anwendung werden Begrüßungen in verschiedenen Sprachen für jeden Nutzer angezeigt. Wiederkehrende Nutzer werden immer in derselben Sprache begrüßt.

Mehrere Anwendungsfenster mit einer Begrüßung in verschiedenen Sprachen

Bevor sich in der Anwendung die Einstellungen für einen Nutzer speichern lassen, benötigen Sie eine Möglichkeit zum Speichern der Informationen über den aktuellen Nutzer in einer Sitzung. Diese Beispielanwendung verwendet Cookies und Firestore zum Speichern von Sitzungsdaten.

  • Erstellen Sie im Terminalfenster eine Datei mit dem Namen main.py mit folgendem Inhalt:

    import random
    from uuid import uuid4
    
    from flask import Flask, make_response, request
    from google.cloud import firestore
    
    app = Flask(__name__)
    db = firestore.Client()
    sessions = db.collection('sessions')
    greetings = [
        'Hello World',
        'Hallo Welt',
        'Ciao Mondo',
        'Salut le Monde',
        'Hola Mundo',
    ]
    
    @firestore.transactional
    def get_session_data(transaction, session_id):
        """ Looks up (or creates) the session with the given session_id.
            Creates a random session_id if none is provided. Increments
            the number of views in this session. Updates are done in a
            transaction to make sure no saved increments are overwritten.
        """
        if session_id is None:
            session_id = str(uuid4())   # Random, unique identifier
    
        doc_ref = sessions.document(document_id=session_id)
        doc = doc_ref.get(transaction=transaction)
        if doc.exists:
            session = doc.to_dict()
        else:
            session = {
                'greeting': random.choice(greetings),
                'views': 0
            }
    
        session['views'] += 1   # This counts as a view
        transaction.set(doc_ref, session)
    
        session['session_id'] = session_id
        return session
    
    @app.route('/', methods=['GET'])
    def home():
        template = '<body>{} views for "{}"</body>'
    
        transaction = db.transaction()
        session = get_session_data(transaction, request.cookies.get('session_id'))
    
        resp = make_response(template.format(
            session['views'],
            session['greeting']
            )
        )
        resp.set_cookie('session_id', session['session_id'], httponly=True)
        return resp
    
    if __name__ == '__main__':
        app.run(host='127.0.0.1', port=8080)
  • Das folgende Diagramm veranschaulicht, wie Firestore Sitzungen für die App Engine-Anwendung verarbeitet.

    Diagramm der Architektur: Nutzer, App Engine, Firestore

Sitzungen löschen

Sie können Sitzungsdaten löschen oder eine automatische Löschstrategie implementieren. Wenn Sie zum Speichern von Sitzungen Lösungen wie Memcache oder Redis verwenden, werden abgelaufene Sitzungen automatisch gelöscht.

Lokal ausführen

  1. Installieren Sie in Ihrem Terminalfenster den HTTP-Server von G:

    pip install gunicorn
    
  2. Führen Sie den Gunicorn-HTTP-Server aus:

    gunicorn -b :8080 main:app
    
  3. Sehen Sie sich die App in Ihrem Webbrowser an:

    Cloud Shell

    Klicken Sie in der Symbolleiste von Cloud Shell auf Webvorschau Webvorschau und wählen Sie Vorschau auf Port 8080 aus.

    Lokaler Computer

    Rufen Sie http://localhost:8080 im Browser auf:

    Sie sehen eine von fünf Begrüßungen: "Hallo Welt", "Hallo Welt", "Hola mundo", "Salut le Monde" oder "Ciao Mondo". Die Sprache ändert sich, wenn Sie die Seite in einem anderen Browser oder im Inkognitomodus öffnen. Sie können die Sitzungsdaten in der Google Cloud Console ansehen und bearbeiten.

    Firestore-Sitzungen in der Cloud Console

  4. Drücken Sie im Terminalfenster Control+C, um den HTTP-Server zu beenden.

In App Engine bereitstellen und ausführen

Mit der App Engine-Standardumgebung können Sie eine Anwendung erstellen und bereitstellen, die zuverlässig unter hoher Last und mit großen Datenmengen ausgeführt wird.

In dieser Anleitung wird der Server mithilfe der App Engine-Standardumgebung bereitgestellt.

  1. Erstellen Sie im Terminalfenster eine app.yaml-Datei und kopieren Sie Folgendes:

    runtime: python37
  2. Stellen Sie die Anwendung in App Engine bereit:

    gcloud app deploy
    
  3. Sehen Sie sich die Live-Anwendung unter https://your-project-id.appspot.com an:

    gcloud app browse
    

    Dabei ist your-project-id Ihre Google Cloud-Projekt-ID.

Die Begrüßung wird nun von einem Webserver bereitgestellt, der in einer App Engine-Instanz ausgeführt wird.

Fehler in der Anwendung beheben

Wenn Sie keine Verbindung zu Ihrer App Engine-Anwendung herstellen können, prüfen Sie Folgendes:

  1. Überprüfen Sie, ob die gcloud-Bereitstellungsbefehle erfolgreich ausgeführt wurden und keine Fehler ausgegeben haben. Wenn Fehler wie message=Build failed aufgetreten sind, beheben Sie diese und stellen Sie die App Engine-Anwendung noch einmal bereit.
  2. Rufen Sie in der Google Cloud Console die Seite Loganzeige auf.

    Zur Seite "Loganzeige"

    1. Klicken Sie in der Drop-down-Liste Kürzlich ausgewählte Ressourcen auf App Engine-Anwendung und dann auf Alle Werte für module_id. Es wird eine Liste der Anfragen abgerufen, die Sie beim Besuch Ihrer Anwendung gestellt haben. Wenn keine Anfragenliste angezeigt wird, bestätigen Sie, dass Sie Alle Werte für module_id aus der Drop-down-Liste ausgewählt haben. Wenn Fehlermeldungen in der Cloud Console angezeigt werden, prüfen Sie, ob der Code Ihrer Anwendung mit dem Code im Abschnitt zum Schreiben der Webanwendung übereinstimmt.

    2. Sorgen Sie dafür, dass die Firestore API aktiviert ist.

Bereinigen

Projekt löschen

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

App Engine-Instanz löschen

  1. Rufen Sie in der Cloud Console die Seite Versionen für App Engine auf.

    Zur Seite "Versionen"

  2. Klicken Sie auf das Kästchen für die nicht standardmäßige Anwendungsversion, die Sie löschen möchten.
  3. Klicken Sie zum Löschen der Anwendungsversion auf Löschen.

Nächste Schritte