Niestandardowe wiadomości e-mail z raportami o błędach dla aplikacji internetowych Python Flask z Twilio SendGrid
Opublikowany: 2020-05-18Im szybciej dowiesz się o błędzie, który Twoja aplikacja internetowa w Pythonie generuje w środowisku produkcyjnym, tym szybciej możesz go rozwiązać. W tym poście dowiesz się, jak wysyłać niestandardowe wiadomości e-mail z raportami o wyjątkach za pomocą Twilio SendGrid dla aplikacji internetowych Flask zbudowanych w języku Python.
Wymagania samouczka
Do wykonania tego samouczka potrzebne będzie następujące oprogramowanie:
- Python 3.6 lub nowszy. Jeśli twój system operacyjny nie zapewnia interpretera Pythona, możesz przejść do python.org, aby pobrać instalator.
- Konto Twilio SendGrid. Z tego artykułu dowiesz się, jak to zrobić, jeśli nie masz jeszcze konta. Darmowe konto SendGrid umożliwia wysyłanie do 100 e-maili dziennie na zawsze.
Korzystanie z Twilio SendGrid
Zaczynamy od skonfigurowania SendGrid do dostępu programowego. Jeśli masz już konto, przejdź do sekcji „Uzyskiwanie klucza API”.
Utwórz konto Twilio SendGrid przez:
- Przechodzę do strony rejestracji Twilio SendGrid.
- Utwórz nazwę użytkownika, hasło i adres e-mail.
- Przejdź do pozostałej części formularza, a następnie kliknij „Utwórz konto”.
Pojawi się kolejny monit o trochę więcej informacji, a następnie będziesz musiał zakończyć proces weryfikacji. Ten wieloetapowy proces weryfikacji pomaga nam trzymać się z dala od złośliwych spamerów, jednocześnie służąc legalnym programistom, takim jak Ty.
Otrzymasz wiadomość e-mail na adres podany podczas rejestracji w celu weryfikacji konta. Po zakończeniu weryfikacji przejdź do pulpitu nawigacyjnego SendGrid.
Uzyskanie klucza API
Potrzebujemy klucza API z Twilio SendGrid, abyśmy mogli uwierzytelniać i wysyłać żądania API.
Przejdź do pulpitu nawigacyjnego i kliknij "Ustawienia". Następnie kliknij „Klucze API”.
Kliknij przycisk „Utwórz klucz API” i nazwij klucz API „Raporty o błędach kolby”. Wybierz „Ograniczony dostęp”.
Następnie kliknij menu rozwijane „Wyślij pocztę”. Włącz opcję „Wyślij pocztę” za pomocą suwaka.
Przewiń w dół i kliknij przycisk „Utwórz i wyświetl”. Skopiuj klucz, a następnie wklej go w bezpieczne miejsce, ponieważ będziemy go używać w naszej aplikacji.
Utwórz środowisko programistyczne Python
Teraz musimy skonfigurować nasze środowisko Python, zanim napiszemy kod. Zrobimy nowy katalog dla naszego projektu i stworzymy pod nim wirtualne środowisko. Następnie instalujemy potrzebne pakiety Pythona w środowisku wirtualnym.
Jeśli używasz systemu Unix lub Mac OS, otwórz terminal i wprowadź następujące polecenia, aby wykonać opisane powyżej zadania:
Dla tych, którzy śledzą samouczek w systemie Windows, wprowadź następujące polecenia w oknie wiersza polecenia:
Ostatnie polecenie używa pip
, instalatora pakietów Pythona, aby zainstalować dwa pakiety, których będziemy używać w tym projekcie, a mianowicie:
- Flask to mikroframework dla aplikacji internetowych.
- Flask może opcjonalnie używać python-dotenv do zarządzania zmiennymi środowiskowymi, więc instalujemy również ten pakiet.
Uwaga: Biblioteka SendGrid jest oficjalnym klientem interfejsu API Pythona Twilio SendGrid.
Konfigurowanie aplikacji Flask
Możemy teraz zacząć pisać kod do naszej podstawowej aplikacji Flask. Przejdź do katalogu flask-error-alerts w poprzednim kroku i uruchom wybrany edytor. Utworzymy dwa pliki:
- .env
- aplikacja.py
Pierwszy plik to nasz plik „dot-env”. Umieścimy tutaj nasz klucz SendGrid API z poprzedniego kroku, a także inne wartości konfiguracyjne dla naszej aplikacji Flask. Drugi plik to miejsce, w którym będzie znajdować się nasza aplikacja Flask. Wprowadźmy kilka zmian w tych plikach i przetestujmy naszą aplikację Flask.
Edytuj plik .env, aby zawierał:
Edytuj plik app.py, aby zawierał:
Teraz możemy sprawdzić, czy aplikacja działa zgodnie z oczekiwaniami. Otwórz terminal, aby upewnić się, że nasze virtualenv jest aktywne, a następnie uruchomimy aplikację Flask z wbudowanym serwerem deweloperskim:
Następnie przejdźmy w naszej przeglądarce do localhost:5000/ i sprawdźmy, czy widzimy napis „Helloworld!” tekst.
Możesz już iść, jeśli zobaczysz ekran podobny do tego na powyższym zrzucie ekranu.
Konfiguracja alertów za pomocą SendGrid
Tworzenie nieobsłużonego wyjątku
Teraz musimy skonfigurować aplikację Flask, aby wysyłała alerty e-mail w przypadku nieobsłużonych wyjątków. Pierwszą rzeczą, którą zrobimy, jest zmodyfikowanie naszego app.py
, aby wyrzucił nieobsługiwany wyjątek.
Teraz, gdy stworzyliśmy sytuację, w której występuje nieobsługiwany wyjątek, zrestartujmy aplikację i obserwujmy bieżące zachowanie. Użyj „Ctrl+C”, aby zatrzymać aplikację Flask i zacznijmy ją od nowa:
Teraz, kiedy przechodzimy do localhost:5000/, otrzymujemy wewnętrzny serwer 500 – och! Ale tego się spodziewaliśmy — to samo stanie się z aplikacją, która ulega awarii z powodu błędu.
Podłączanie do nieobsługiwanych wyjątków Flask
Musimy dodać trochę kodu, który pozwoli nam podłączyć się do wbudowanej obsługi wyjątków Flask, aby aplikacja wysłała wiadomość e-mail w odpowiedzi na nieobsługiwany wyjątek. Gdy to zrobimy, będziemy mogli użyć SendGrid do wysłania wiadomości e-mail o wyjątku. Uruchom ten edytor tekstu i dodajmy ten kod do app.py :
Flask ma wbudowane programy obsługi błędów (więcej na ten temat przeczytasz tutaj). Używamy dekoratora @app.errorhandler
, aby zarejestrować funkcję w aplikacji Flask. Jest dość podobny do dekoratora @app.route
, z tym wyjątkiem, że pozwala nam zarejestrować funkcję, która zostanie wykonana, gdy w naszej aplikacji wystąpią określone typy błędów. W tym przypadku zwracamy uwagę na wyjątek InternalServerError
. Jest to wyjątek, który Flask i jego podstawowa biblioteka narzędziowa Werkzeug podnoszą, gdy wystąpi nieobsługiwany wyjątek.
Uwaga: Używamy wbudowanego modułu traceback Pythona, aby pobrać informacje o traceback. Utworzona przez nas zmienna o nazwie error_tb
jest ciągiem znaków zawierającym śledzenie. To śledzenie jest dokładnie takie samo, jak to, co widzimy w terminalu, gdy nieobsługiwany wyjątek występuje w aplikacji Flask. Przekażemy te informacje do naszego e-maila SendGrid w następnej sekcji.
Dodaliśmy również wywołanie metody app.finalize_request
. Zachowuje to domyślne zachowanie naszej aplikacji Flask: gdy wystąpi nieobsługiwany wyjątek, nadal zwrócimy przeglądarce odpowiedź na wewnętrzny błąd serwera.
Wysyłanie wiadomości e-mail z alertem za pomocą SendGrid
Jesteśmy teraz w punkcie, w którym możemy ustawić kod do wysłania e-maila z alertem. Zróbmy to, aktualizując app.py tak, aby zawierał następujące elementy:
Dodaliśmy funkcję o nazwie create_message
, która konfiguruje obiekt SendMail Mail
. Ten obiekt pobiera FROM_EMAIL
i TO_EMAIL
z pliku .env. Powiedziawszy to, musimy dodać następujące wiersze do naszego pliku .env:
Ponieważ używamy pliku .env do ładowania wartości, musieliśmy również dodać wywołanie funkcji load_dotenv modułu load_dotenv
. Gwarantuje to, że gdy nasz kod zostanie uruchomiony, wymagane zmienne środowiskowe będą dostępne w kodzie naszej aplikacji.
U góry utworzyliśmy instancję klienta API SendGrid:
Ten klient automatycznie szuka zmiennej środowiskowej o nazwie SENDGRID_API_KEY
i używa jej do uwierzytelniania na serwerach SendGrid. Podobnie jak w przypadku innych zmiennych w naszym pliku load_dotenv
, wywołanie load_dotenv zapewnia, że zmienna zostanie zaimportowana do środowiska procesu.
Ostatnim godnym uwagi dodatkiem w tej sekcji jest wywołanie API SendGrid:
Wszystko, co dzieje się w tym bloku kodu, polega na tym, że próbujemy wysłać wiadomość e-mail za pomocą SendGrid, ale jeśli wystąpi wyjątek, po prostu wypisujemy błąd. W aplikacji produkcyjnej możesz chcieć ponowić tę operację, ponieważ najbardziej prawdopodobnym źródłem błędu jest to, że usługa SendGrid jest tymczasowo niedostępna.
Testowanie alertów
Po wprowadzeniu zmian w kodzie przetestujmy go! Tak więc oczekujemy, że odwiedzimy naszą aplikację Flask na localhost:5000/ zamierzamy:
- Otrzymaj wewnętrzny błąd serwera 500 w przeglądarce.
- Otrzymuj alert e-mail zawierający śledzenie.
Aby to przetestować, musimy ponownie uruchomić aplikację Flask, aby nasze zmiany zaczęły obowiązywać. Więc jeśli masz uruchomiony serwer programistyczny Flask, zatrzymaj go za pomocą „Ctrl + C”, a następnie uruchom go ponownie:
Przejdźmy teraz do localhost:5000/ i otrzymajmy wewnętrzny błąd serwera 500. Minutę lub dwie później powinieneś otrzymać wiadomość e-mail, która wygląda następująco:
Wniosek
Masz to! Zbudowaliśmy całkiem poręczny system ostrzegania ze stosunkowo niewielką ilością kodu. Nasza aplikacja Flask będzie teraz wysyłać alerty e-mail, gdy wystąpią nieobsłużone wyjątki.
Mamy nadzieję, że podobało Ci się śledzenie tego samouczka, a jeśli masz jakiekolwiek pytania, skontaktuj się z nami. Cały kod opracowany w tym samouczku można znaleźć tutaj.