Benutzerdefinierte Fehlerberichts-E-Mails für Python Flask-Web-Apps mit Twilio SendGrid

Veröffentlicht: 2020-05-18

Je früher Sie von einem Fehler erfahren, den Ihre Python-Webanwendung in der Produktion auslöst, desto schneller können Sie ihn beheben. Dieser Beitrag zeigt Ihnen, wie Sie mit Twilio SendGrid für Python-erstellte Flask-Webanwendungen benutzerdefinierte Ausnahmeberichts-E-Mails senden.

Tutorial-Anforderungen

Sie benötigen die folgende Software, um dieses Tutorial durchzuarbeiten:

  • Python 3.6 oder neuer. Wenn Ihr Betriebssystem keinen Python-Interpreter bereitstellt, können Sie zu python.org gehen, um ein Installationsprogramm herunterzuladen.
  • Ein Twilio SendGrid-Konto. Dieser Artikel führt Sie durch die Einrichtung, wenn Sie noch kein Konto haben. Mit einem kostenlosen SendGrid-Konto können Sie bis zu 100 E-Mails pro Tag für immer versenden.

Verwendung von Twilio SendGrid

Wir beginnen damit, SendGrid für den programmgesteuerten Zugriff einzurichten. Wenn Sie bereits ein Konto haben, fahren Sie mit dem Abschnitt „Erhalten Ihres API-Schlüssels“ fort.

Erstellen Sie ein Twilio SendGrid-Konto, indem Sie:

  1. Gehen Sie zur Anmeldeseite von Twilio SendGrid.
  2. Erstellen Sie einen Benutzernamen, ein Passwort und eine E-Mail-Adresse.
  3. Fahren Sie mit dem Rest des Formulars fort und klicken Sie dann auf „Konto erstellen“.

Es wird eine weitere Eingabeaufforderung für ein paar weitere Informationen geben, und dann müssen Sie den Überprüfungsprozess abschließen. Dieser mehrstufige Verifizierungsprozess hilft uns, böswillige Spammer fernzuhalten und gleichzeitig legitimen Entwicklern wie Ihnen zu dienen.

Sie erhalten eine E-Mail an die Adresse, mit der Sie sich angemeldet haben, um Ihr Konto zu verifizieren. Navigieren Sie zum SendGrid-Dashboard, wenn Sie die Überprüfung abgeschlossen haben.

Erhalten eines API-Schlüssels

Wir benötigen einen API-Schlüssel von Twilio SendGrid, damit wir uns authentifizieren und API-Anfragen stellen können.

Navigieren Sie zum Dashboard und klicken Sie auf „Einstellungen“. Klicken Sie dann auf „API-Schlüssel“.

Klicken Sie auf die Schaltfläche „API-Schlüssel erstellen“ und nennen Sie den API-Schlüssel „Flask Error Reports“. Wählen Sie „Eingeschränkter Zugriff“.

Klicken Sie anschließend auf das Dropdown-Menü „E-Mail senden“. Aktivieren Sie die Option „Mail senden“ mit dem Schieberegler.

Scrollen Sie nach unten und klicken Sie auf die Schaltfläche „Erstellen & Anzeigen“. Kopieren Sie den Schlüssel und fügen Sie ihn an einem sicheren Ort ein, da wir ihn in unserer Anwendung verwenden werden.

Erstellen Sie eine Python-Entwicklungsumgebung

Jetzt müssen wir unsere Python-Umgebung einrichten, bevor wir den Code schreiben. Wir erstellen ein neues Verzeichnis für unser Projekt und erstellen darunter eine virtuelle Umgebung. Wir installieren dann die Python-Pakete, die wir innerhalb der virtuellen Umgebung benötigen.

Wenn Sie ein Unix- oder Mac OS-System verwenden, öffnen Sie ein Terminal und geben Sie die folgenden Befehle ein, um die oben beschriebenen Aufgaben auszuführen:

Für diejenigen von Ihnen, die dem Tutorial unter Windows folgen, geben Sie die folgenden Befehle in ein Eingabeaufforderungsfenster ein:

Der letzte Befehl verwendet pip , das Installationsprogramm für Python-Pakete, um die beiden Pakete zu installieren, die wir in diesem Projekt verwenden werden:

  • Flask ist ein Mikroframework für Webanwendungen.
  • Flask kann optional python-dotenv zum Verwalten von Umgebungsvariablen verwenden, daher installieren wir auch dieses Paket.

Hinweis: Die SendGrid-Bibliothek ist der offizielle Twilio SendGrid-Python-API-Client.

Flask-Anwendung einrichten

Wir können jetzt mit dem Schreiben des Codes für unsere grundlegende Flask-Anwendung beginnen. Navigieren Sie im vorherigen Schritt in das Verzeichnis "flask-error-alerts" und starten Sie den Editor Ihrer Wahl. Wir werden zwei Dateien erstellen:

  1. .env
  2. app.py

Die erste Datei heißt unsere „dot-env“-Datei. Wir platzieren hier unseren SendGrid-API-Schlüssel aus dem vorherigen Schritt sowie andere Konfigurationswerte für unsere Flask-Anwendung. In der zweiten Datei befindet sich unsere Flask-Anwendung. Lassen Sie uns einige Änderungen an diesen Dateien vornehmen und unsere Flask-Anwendung testen.

Bearbeiten Sie die .env-Datei so, dass sie Folgendes enthält:

Bearbeiten Sie app.py so, dass es Folgendes enthält:

Jetzt können wir überprüfen, ob die Anwendung wie erwartet ausgeführt wird. Öffnen Sie ein Terminal, um sicherzustellen, dass unsere virtuelle Umgebung aktiv ist, und führen Sie dann die Flask-App mit dem integrierten Entwicklungsserver aus:

Navigieren wir als Nächstes in unserem Browser zu localhost:5000/ und prüfen Sie, ob „Helloworld!“ angezeigt wird. Text.

Sie können loslegen, wenn Sie einen Bildschirm wie den im obigen Screenshot sehen.

Konfigurieren von Warnungen mit SendGrid

Erstellen einer nicht behandelten Ausnahme

Jetzt müssen wir die Flask-Anwendung so konfigurieren, dass E-Mail-Benachrichtigungen gesendet werden, wenn es unbehandelte Ausnahmen gibt. Das erste, was wir tun werden, ist, unsere app.py zu ändern, um eine unbehandelte Ausnahme auszulösen.

Nachdem wir nun eine Situation geschaffen haben, in der eine nicht behandelte Ausnahme auftritt, starten wir die Anwendung neu und beobachten das aktuelle Verhalten. Verwenden Sie „Strg+C“, um die Flask-Anwendung zu stoppen, und starten Sie sie erneut:

Wenn wir jetzt zu localhost:5000/ navigieren, erhalten wir einen 500 internen Server – oh oh! Aber genau das haben wir erwartet – dasselbe passiert bei einer Anwendung, die aufgrund eines Fehlers abstürzt.

Nicht behandelte Ausnahmen in Flask einhängen

Wir müssen etwas Code hinzufügen, der es uns ermöglicht, uns in den integrierten Ausnahmehandler von Flask einzuklinken, damit die Anwendung eine E-Mail als Antwort auf eine nicht behandelte Ausnahme sendet. Sobald wir das getan haben, können wir SendGrid verwenden, um eine E-Mail über die Ausnahme zu senden. Starten Sie diesen Texteditor und fügen wir diesen Code zu app.py hinzu :

Flask hat eingebaute Fehlerbehandler (lesen Sie hier mehr darüber). Wir verwenden den Decorator @app.errorhandler , um eine Funktion bei der Flask-Anwendung zu registrieren. Es ist dem @app.route Decorator ziemlich ähnlich, außer dass es uns ermöglicht, eine Funktion zu registrieren, die ausgeführt wird, wenn bestimmte Arten von Fehlern in unserer Anwendung auftreten. In diesem Fall achten wir auf die InternalServerError Ausnahme. Dies ist die Ausnahme, die Flask und die zugrunde liegende Dienstprogrammbibliothek Werkzeug auslösen, wenn eine nicht behandelte Ausnahme auftritt.

Hinweis: Wir verwenden das integrierte Traceback-Modul von Python, um die Traceback-Informationen abzurufen. Die von uns erstellte Variable namens error_tb ist eine Zeichenfolge, die das Traceback enthält. Dieses Traceback ist genau dasselbe wie das, was wir im Terminal sehen, wenn die nicht behandelte Ausnahme in der Flask-Anwendung auftritt. Wir werden diese Informationen im nächsten Abschnitt an unsere SendGrid-E-Mail weitergeben.

Wir haben auch einen Aufruf zur Methode app.finalize_request hinzugefügt. Dadurch wird das Standardverhalten unserer Flask-Anwendung beibehalten: Wenn eine nicht behandelte Ausnahme auftritt, geben wir dennoch die interne Serverfehlerantwort an den Browser zurück.

Senden der Alarm-E-Mail mit SendGrid

Wir sind jetzt an dem Punkt angelangt, an dem wir den Code zum Senden der Benachrichtigungs-E-Mail einrichten können. Tun wir das also, indem wir app.py so aktualisieren, dass es Folgendes enthält:

Wir haben eine Funktion namens create_message hinzugefügt, die ein SendMail Mail -Objekt einrichtet. Dieses Objekt FROM_EMAIL und TO_EMAIL aus der .env-Datei ab. Nachdem dies gesagt wurde, müssen wir die folgenden Zeilen in unsere .env-Datei einfügen:

Da wir die .env-Datei zum Laden von Werten verwenden, mussten wir auch einen Aufruf zur load_dotenv -Funktion des dotenv-Moduls hinzufügen. Dadurch wird sichergestellt, dass beim Ausführen unseres Codes die erforderlichen Umgebungsvariablen in unserem Anwendungscode verfügbar sind.

Ganz oben haben wir eine Instanz des SendGrid-API-Clients erstellt:

Dieser Client sucht automatisch nach einer Umgebungsvariable mit dem Namen SENDGRID_API_KEY und verwendet sie, um sich bei den SendGrid-Servern zu authentifizieren. Wie bei den anderen Variablen in unserer .env-Datei sorgt der load_dotenv -Aufruf dafür, dass die Variable in die Umgebung des Prozesses importiert wird.

Die letzte bemerkenswerte Ergänzung in diesem Abschnitt ist der SendGrid-API-Aufruf:

Alles, was in diesem Codeblock passiert, ist, dass wir versuchen, die E-Mail mit SendGrid zu senden, aber wenn eine Ausnahme auftritt, geben wir einfach aus, was der Fehler war. In einer Produktionsanwendung sollten Sie diesen Vorgang möglicherweise wiederholen, da die wahrscheinlichste Fehlerquelle hier darin besteht, dass der SendGrid-Dienst vorübergehend nicht verfügbar ist.

Testen der Warnungen

Sobald Sie die Änderungen an Ihrem Code vorgenommen haben, testen wir ihn! Die Erwartung hier ist also, dass wir unsere Flask-Anwendung unter localhost:5000/ besuchen, wir gehen zu:

  1. Erhalten Sie einen 500 internal server error im Browser.
  2. Erhalten Sie eine E-Mail-Benachrichtigung, die das Traceback enthält.

Um dies zu testen, müssen wir die Flask-Anwendung neu starten, damit unsere Änderungen wirksam werden. Wenn Sie also den Flask-Entwicklungsserver laufen haben, stoppen Sie diesen mit „Strg+C“ und starten Sie ihn dann neu mit:

Navigieren wir nun zu localhost:5000/ und erhalten den internen Serverfehler 500. Ein oder zwei Minuten später sollten Sie eine E-Mail erhalten, die wie folgt aussieht:

Fazit

Hier hast du es! Wir haben mit relativ wenig Code ein ziemlich praktisches Warnsystem aufgebaut. Unsere Flask-Anwendung sendet jetzt E-Mail-Benachrichtigungen, wenn unbehandelte Ausnahmen auftreten.

Wir hoffen, dass es Ihnen Spaß gemacht hat, dieses Tutorial zu verfolgen, und wenn Sie Fragen haben, können Sie sich gerne an uns wenden. Den gesamten Code, der in diesem Tutorial entwickelt wurde, finden Sie hier.