E-mailuri personalizate cu rapoarte de eroare pentru aplicațiile web Python Flask cu Twilio SendGrid

Publicat: 2020-05-18

Cu cât știi mai devreme despre o eroare pe care aplicația ta web Python o aruncă în producție, cu atât mai repede o poți rezolva. Această postare vă va arăta cum să trimiteți e-mailuri personalizate de raportare a excepțiilor cu Twilio SendGrid pentru aplicațiile web Flask construite de Python.

Cerințe de tutorial

Veți avea nevoie de următorul software pentru a lucra prin acest tutorial:

  • Python 3.6 sau mai nou. Dacă sistemul dvs. de operare nu oferă un interpret Python, puteți accesa python.org pentru a descărca un program de instalare.
  • Un cont Twilio SendGrid. Acest articol va parcurge configurarea, dacă nu aveți deja un cont. Un cont SendGrid gratuit vă permite să trimiteți până la 100 de e-mailuri pe zi pentru totdeauna.

Folosind Twilio SendGrid

Începem prin a configura SendGrid pentru acces programatic. Dacă aveți deja un cont, treceți la secțiunea „Obținerea cheii API”.

Creați un cont Twilio SendGrid prin:

  1. Mergeți la pagina de înscriere Twilio SendGrid.
  2. Creați un nume de utilizator, o parolă și o adresă de e-mail.
  3. Continuați cu restul formularului și apoi faceți clic pe „Creați cont”.

Va fi o altă solicitare pentru mai multe informații și apoi va trebui să finalizați procesul de verificare. Acest proces de verificare în mai mulți pași ne ajută să ținem departe de spammerii rău intenționați, în timp ce deservim dezvoltatori legitimi ca dvs.

Veți primi un e-mail la adresa pe care ați folosit-o pentru a vă înscrie pentru a vă verifica contul. Navigați la tabloul de bord SendGrid când ați terminat verificarea.

Obținerea unei chei API

Avem nevoie de o cheie API de la Twilio SendGrid, astfel încât să ne putem autentifica și să facem solicitări API.

Navigați la tabloul de bord și faceți clic pe „Setări”. Apoi faceți clic pe „Chei API”.

Faceți clic pe butonul „Creați cheia API” și denumiți cheia API „Rapoarte de erori Flask”. Selectați „Acces restricționat”.

Apoi, faceți clic pe meniul derulant „Trimite e-mail”. Activați opțiunea „Trimitere e-mail” folosind glisorul.

Derulați în partea de jos și faceți clic pe butonul „Creați și vizualizați”. Copiați cheia și apoi lipiți-o într-un loc sigur pentru că o vom folosi în aplicația noastră.

Creați un mediu de dezvoltare Python

Acum trebuie să configuram mediul nostru Python înainte de a scrie codul. Vom face un nou director pentru proiectul nostru și vom crea un mediu virtual sub acesta. Apoi instalăm pachetele Python de care avem nevoie în mediul virtual.

Dacă utilizați un sistem Unix sau Mac OS, deschideți un terminal și introduceți următoarele comenzi pentru a efectua sarcinile descrise mai sus:

Pentru cei dintre voi care urmează tutorialul pe Windows, introduceți următoarele comenzi într-o fereastră de prompt de comandă:

Ultima comandă folosește pip , programul de instalare a pachetelor Python, pentru a instala cele două pachete pe care le vom folosi în acest proiect, care sunt:

  • Flask este un microframework pentru aplicații web.
  • Flask poate folosi opțional python-dotenv pentru gestionarea variabilelor de mediu, așa că instalăm și acest pachet.

Notă: Biblioteca SendGrid este clientul oficial Twilio SendGrid Python API.

Configurarea aplicației Flask

Acum putem începe să scriem codul pentru aplicația noastră de bază Flask. Navigați în directorul flask-error-alerts din pasul anterior și porniți editorul dorit. Vom crea două fișiere:

  1. .env
  2. app.py

Primul fișier se numește fișierul nostru „dot-env”. Vom plasa aici cheia API SendGrid de la pasul anterior, precum și alte valori de configurare pentru aplicația noastră Flask. Al doilea fișier este locul unde va fi localizată aplicația noastră Flask. Să facem câteva modificări acestor fișiere și să testăm aplicația noastră Flask.

Editați fișierul .env pentru a conține:

Editați app.py pentru a conține:

Acum putem verifica dacă aplicația funcționează conform așteptărilor. Deschideți un terminal pentru a vă asigura că virtualenv-ul nostru este activ și apoi vom rula aplicația Flask cu serverul de dezvoltare încorporat:

Apoi, să navigăm în browser la localhost:5000/ și să verificăm dacă vedem „Helloworld!” text.

Ești bine să pleci dacă vezi un ecran ca cel din captura de ecran de mai sus.

Configurarea alertelor cu SendGrid

Se creează o excepție netratată

Acum trebuie să configuram aplicația Flask pentru a trimite alerte prin e-mail atunci când există excepții negestionate. Primul lucru pe care îl vom face este să ne modificăm app.py pentru a arunca o excepție netratată.

Acum că am creat o situație în care apare o excepție netratată, să repornim aplicația și să observăm comportamentul curent. Folosiți „Ctrl+C” pentru a opri aplicația Flask și să o pornim din nou:

Acum, când navigăm la localhost:5000/, obținem un server intern de 500 – uh oh! Dar asta este ceea ce ne așteptam – același lucru se va întâmpla cu o aplicație care se blochează din cauza unei erori.

Conectarea la Flask excepții negestionate

Trebuie să adăugăm un cod care ne va permite să ne conectăm la gestionarea de excepții încorporată din Flask, astfel încât aplicația să trimită un e-mail ca răspuns la o excepție netratată. Odată ce am făcut asta, vom putea folosi SendGrid pentru a trimite un e-mail despre excepție. Porniți acel editor de text și să adăugăm acest cod la app.py :

Flask are manipulatori de erori încorporați (citiți mai multe despre asta aici). Folosim decoratorul @app.errorhandler pentru a înregistra o funcție în aplicația Flask. Este destul de similar cu decoratorul @app.route , cu excepția faptului că ne permite să înregistrăm o funcție care este executată atunci când apar anumite tipuri de erori în aplicația noastră. În acest caz, acordăm atenție excepției InternalServerError . Aceasta este excepția pe care Flask și biblioteca de utilitate de bază Werkzeug o ridică ori de câte ori apare o excepție netratată.

Notă: folosim modulul de urmărire încorporat al lui Python pentru a prelua informațiile de urmărire. Variabila pe care am creat-o, numită error_tb este un șir care conține traceback. Această urmărire este exact aceeași cu ceea ce vedem în terminal când apare excepția netratată în aplicația Flask. Vom transmite aceste informații în e-mailul nostru SendGrid în secțiunea următoare.

De asemenea, am adăugat un apel la metoda app.finalize_request . Acest lucru menține comportamentul implicit al aplicației noastre Flask: atunci când apare o excepție netratată, vom returna în continuare răspunsul la eroarea serverului intern către browser.

Trimiterea e-mailului de alertă cu SendGrid

Suntem acum în punctul în care putem configura codul pentru a trimite e-mailul de alertă. Deci, să facem asta actualizând app.py pentru a conține următoarele:

Am adăugat o funcție numită create_message care setează un obiect SendMail Mail . Acest obiect extrage FROM_EMAIL și TO_EMAIL din fișierul .env. Acestea fiind spuse, trebuie să adăugăm următoarele linii în fișierul nostru .env:

Deoarece folosim fișierul .env pentru a încărca valori, a trebuit să adăugăm și un apel la funcția load_dotenv a modulului load_dotenv . Acest lucru asigură că atunci când codul nostru rulează, variabilele de mediu necesare vor fi disponibile în codul aplicației noastre.

În partea de sus am creat o instanță a clientului API SendGrid:

Acest client caută automat o variabilă de mediu numită SENDGRID_API_KEY și o folosește pentru a se autentifica pe serverele SendGrid. Ca și în cazul celorlalte variabile din fișierul nostru .env, apelul load_dotenv asigură importarea variabilei în mediul procesului.

Ultima adăugare demnă de remarcat în această secțiune este apelul API SendGrid:

Tot ceea ce se întâmplă în acel bloc de cod este că încercăm să trimitem e-mailul folosind SendGrid, dar dacă apare o excepție, imprimăm doar care a fost eroarea. Într-o aplicație de producție, este posibil să doriți să reîncercați această operațiune, deoarece cea mai probabilă sursă de eroare aici este faptul că serviciul SendGrid este temporar indisponibil.

Testarea alertelor

După ce ați făcut modificările codului dvs., să-l testăm! Deci, așteptarea aici este că vom vizita aplicația noastră Flask la localhost:5000/ vom merge la:

  1. Primiți o eroare internă de server 500 în browser.
  2. Primiți o alertă prin e-mail care conține urmărirea.

Pentru a testa acest lucru, trebuie să repornim aplicația Flask, astfel încât modificările noastre să aibă efect. Deci, dacă rulează serverul de dezvoltare Flask, opriți-l cu „Ctrl+C” și apoi reporniți-l cu:

Acum să navigăm la localhost:5000/ și să primim eroarea serverului intern 500. Un minut sau două mai târziu ar trebui să primiți un e-mail care arată astfel:

Concluzie

Iată-l! Am creat un sistem de alertă destul de util, cu o cantitate relativ mică de cod. Aplicația noastră Flask va trimite acum alerte prin e-mail ori de câte ori apar excepții negestionate.

Sperăm că v-a plăcut să urmăriți acest tutorial și, dacă aveți întrebări, nu ezitați să ne contactați. Tot codul dezvoltat în acest tutorial poate fi găsit aici.