Email Laporan Kesalahan Kustom untuk Aplikasi Web Python Flask dengan Twilio SendGrid

Diterbitkan: 2020-05-18

Semakin cepat Anda mengetahui tentang kesalahan yang dibuat oleh aplikasi web Python Anda dalam produksi, semakin cepat Anda dapat menyelesaikannya. Posting ini akan menunjukkan cara mengirim email pelaporan pengecualian khusus dengan Twilio SendGrid untuk aplikasi web Flask yang dibuat dengan Python.

Persyaratan tutorial

Anda akan memerlukan perangkat lunak berikut untuk mengerjakan tutorial ini:

  • Python 3.6 atau lebih baru. Jika sistem operasi Anda tidak menyediakan juru bahasa Python, Anda dapat membuka python.org untuk mengunduh penginstal.
  • Akun Twilio SendGrid. Artikel ini akan membahas pengaturannya jika Anda belum memiliki akun. Akun SendGrid gratis memungkinkan Anda mengirim hingga 100 email per hari selamanya.

Menggunakan Twilio SendGrid

Kita mulai dengan menyiapkan SendGrid untuk akses terprogram. Jika Anda sudah memiliki akun, lewati ke bagian "Mendapatkan kunci API Anda".

Buat akun Twilio SendGrid dengan:

  1. Menuju ke halaman pendaftaran Twilio SendGrid.
  2. Buat nama pengguna, kata sandi, dan alamat email.
  3. Lanjutkan dengan sisa formulir dan kemudian klik "Buat Akun."

Akan ada permintaan lain untuk sedikit informasi lebih lanjut dan kemudian Anda harus menyelesaikan proses verifikasi. Proses verifikasi multi-langkah ini membantu kami mencegah spammer jahat sambil melayani pengembang yang sah seperti Anda.

Anda akan menerima email di alamat yang Anda gunakan untuk mendaftar untuk memverifikasi akun Anda. Navigasikan ke dasbor SendGrid setelah Anda menyelesaikan verifikasi.

Mendapatkan kunci API

Kami membutuhkan kunci API dari Twilio SendGrid agar kami dapat mengotentikasi dan membuat permintaan API.

Arahkan ke dasbor dan klik "Pengaturan." Kemudian klik "Kunci API."

Klik tombol "Buat Kunci API" dan beri nama Kunci API "Laporan Kesalahan Flask." Pilih "Akses Terbatas".

Selanjutnya, klik pada tarik-turun "Kirim Surat". Aktifkan opsi "Kirim Surat" dengan menggunakan penggeser.

Gulir ke bawah dan klik tombol "Buat & Lihat". Salin kuncinya lalu tempel di tempat yang aman karena kami akan menggunakannya di aplikasi kami.

Buat lingkungan pengembangan Python

Sekarang kita perlu mengatur lingkungan Python kita sebelum kita menulis kode. Kami akan membuat direktori baru untuk proyek kami dan membuat lingkungan virtual di bawahnya. Kami kemudian menginstal paket Python yang kami butuhkan dalam lingkungan virtual.

Jika Anda menggunakan sistem Unix atau Mac OS, buka terminal dan masukkan perintah berikut untuk melakukan tugas yang dijelaskan di atas:

Bagi Anda yang mengikuti tutorial di Windows, masukkan perintah berikut di jendela prompt perintah:

Perintah terakhir menggunakan pip , installer paket Python, untuk menginstal dua paket yang akan kita gunakan dalam proyek ini, yaitu:

  • Flask adalah microframework untuk aplikasi web.
  • Flask opsional dapat menggunakan python-dotenv untuk mengelola variabel lingkungan, jadi kami juga menginstal paket ini.

Catatan: Pustaka SendGrid adalah klien API Twilio SendGrid Python resmi.

Menyiapkan aplikasi Flask

Sekarang kita dapat mulai menulis kode untuk aplikasi Flask dasar kita. Navigasikan ke direktori flask-error-alerts pada langkah sebelumnya dan mulai editor pilihan Anda. Kita akan membuat dua file:

  1. .env
  2. app.py

File pertama disebut file "dot-env" kami. Kami akan menempatkan kunci API SendGrid kami dari langkah sebelumnya di sini, serta nilai konfigurasi lainnya untuk aplikasi Flask kami. File kedua adalah tempat aplikasi Flask kita akan berada. Mari kita buat beberapa perubahan pada file-file ini dan uji aplikasi Flask kita.

Edit file .env agar berisi:

Edit app.py untuk memuat:

Sekarang kita dapat memeriksa aplikasi berjalan seperti yang diharapkan. Buka terminal untuk memastikan virtualenv kami aktif dan kemudian kami akan menjalankan aplikasi Flask dengan server pengembangan bawaan:

Selanjutnya, mari navigasikan browser kita ke localhost:5000/ dan periksa apakah kita melihat "Helloworld!" teks.

Anda baik-baik saja jika melihat layar seperti pada tangkapan layar di atas.

Mengonfigurasi peringatan dengan SendGrid

Membuat pengecualian yang tidak tertangani

Sekarang kita perlu mengkonfigurasi aplikasi Flask untuk mengirim peringatan email ketika ada pengecualian yang tidak tertangani. Hal pertama yang akan kita lakukan adalah memodifikasi app.py kita untuk membuang pengecualian yang tidak tertangani.

Sekarang setelah kita membuat situasi di mana pengecualian yang tidak tertangani terjadi, mari mulai ulang aplikasi dan amati perilaku saat ini. Gunakan “Ctrl+C” untuk menghentikan aplikasi Flask, dan mari kita mulai lagi:

Sekarang, ketika kita menavigasi ke localhost:5000/, kita mendapatkan 500 server internal–uh oh! Tapi inilah yang kami harapkan – hal yang sama akan terjadi pada aplikasi yang mogok karena bug.

Menghubungkan ke Flask pengecualian yang tidak tertangani

Kita perlu menambahkan beberapa kode yang memungkinkan kita untuk terhubung ke pengendali pengecualian bawaan Flask sehingga aplikasi akan mengirimkan email sebagai tanggapan atas pengecualian yang tidak tertangani. Setelah kami selesai melakukannya, kami akan dapat menggunakan SendGrid untuk mengirim email tentang pengecualian. Jalankan editor teks itu dan mari tambahkan kode ini ke app.py :

Flask memang memiliki penangan kesalahan bawaan (baca lebih lanjut tentang itu di sini). Kami menggunakan dekorator @app.errorhandler untuk mendaftarkan fungsi dengan aplikasi Flask. Ini sangat mirip dengan dekorator @app.route kecuali bahwa ini memungkinkan kita untuk mendaftarkan fungsi yang dieksekusi ketika jenis kesalahan tertentu terjadi di aplikasi kita. Dalam hal ini, kami memperhatikan pengecualian InternalServerError . Ini adalah pengecualian yang Flask dan perpustakaan utilitas yang mendasarinya Werkzeug meningkatkan setiap kali pengecualian yang tidak tertangani terjadi.

Catatan: Kami menggunakan modul traceback bawaan Python untuk mengambil informasi traceback. Variabel yang kita buat bernama error_tb adalah string yang berisi traceback. Traceback ini sama persis dengan yang kita lihat di terminal ketika unhandled exception terjadi di aplikasi Flask. Kami akan meneruskan informasi ini ke email SendGrid kami di bagian selanjutnya.

Kami juga menambahkan panggilan ke metode app.finalize_request . Ini mempertahankan perilaku default aplikasi Flask kami: ketika pengecualian yang tidak tertangani terjadi, kami masih akan mengembalikan respons kesalahan server internal ke browser.

Mengirim email peringatan dengan SendGrid

Kami sekarang berada di titik di mana kami dapat mengatur kode untuk mengirim email peringatan. Jadi mari kita lakukan itu dengan memperbarui app.py agar berisi yang berikut ini:

Kami telah menambahkan fungsi yang disebut create_message yang mengatur objek SendMail Mail . Objek ini menarik FROM_EMAIL dan TO_EMAIL dari file .env. Dengan itu kita perlu menambahkan baris berikut ke dalam file .env kita:

Karena kita menggunakan file .env untuk memuat nilai, kita juga harus menambahkan panggilan ke fungsi load_dotenv modul load_dotenv . Ini memastikan bahwa ketika kode kita berjalan, variabel lingkungan yang diperlukan akan tersedia dalam kode aplikasi kita.

Di dekat bagian atas kami telah membuat instance dari klien API SendGrid:

Klien ini secara otomatis mencari variabel lingkungan bernama SENDGRID_API_KEY dan menggunakannya untuk mengautentikasi terhadap server SendGrid. Seperti variabel lain dalam file .env kami, panggilan load_dotenv memastikan bahwa variabel diimpor ke lingkungan proses.

Penambahan penting terakhir di bagian ini adalah panggilan API SendGrid:

Semua yang terjadi di blok kode itu adalah bahwa kami mencoba mengirim email menggunakan SendGrid tetapi jika terjadi pengecualian, kami hanya mencetak apa kesalahannya. Dalam aplikasi produksi, Anda mungkin ingin mencoba lagi operasi ini karena kemungkinan besar sumber kesalahan di sini adalah bahwa layanan SendGrid untuk sementara tidak tersedia.

Menguji peringatan

Setelah Anda membuat perubahan pada kode Anda, mari kita uji! Jadi harapannya di sini adalah kita mengunjungi aplikasi Flask kita di localhost:5000/ kita akan:

  1. Terima kesalahan 500 server internal di browser.
  2. Terima peringatan email yang berisi traceback.

Untuk mengujinya kita perlu me-restart aplikasi Flask agar perubahan kita berlaku. Jadi jika Anda menjalankan server pengembangan Flask, hentikan itu dengan "Ctrl + C" dan kemudian restart dengan:

Sekarang mari navigasikan ke localhost:5000/ dan terima kesalahan server internal 500. Satu atau dua menit kemudian Anda akan menerima email yang terlihat seperti berikut:

Kesimpulan

Di sana Anda memilikinya! Kami telah membangun sistem peringatan yang cukup praktis dengan jumlah kode yang relatif kecil. Aplikasi Flask kami sekarang akan mengirimkan peringatan email setiap kali terjadi pengecualian yang tidak tertangani.

Kami harap Anda menikmati mengikuti tutorial ini dan jika Anda memiliki pertanyaan, silakan hubungi kami. Semua kode yang dikembangkan dalam tutorial ini dapat ditemukan di sini.