Twilio SendGrid ile Python Flask Web Uygulamaları için Özel Hata Raporu E-postaları

Yayınlanan: 2020-05-18

Python web uygulamanızın üretimde oluşturduğu bir hatayı ne kadar erken öğrenirseniz, o kadar hızlı çözebilirsiniz. Bu gönderi, Python tarafından oluşturulmuş Flask web uygulamaları için Twilio SendGrid ile özel istisna raporlama e-postalarının nasıl gönderileceğini gösterecektir.

Eğitim gereksinimleri

Bu eğitimde çalışmak için aşağıdaki yazılıma ihtiyacınız olacak:

  • Python 3.6 veya daha yenisi. İşletim sisteminiz bir Python yorumlayıcısı sağlamıyorsa, bir yükleyici indirmek için python.org adresine gidebilirsiniz.
  • Bir Twilio SendGrid hesabı. Bu makale, zaten bir hesabınız yoksa, bunu ayarlama konusunda adım adım ilerleyecektir. Ücretsiz bir SendGrid hesabı, sonsuza kadar günde 100 e-posta göndermenize izin verir.

Twilio SendGrid'i kullanma

Programatik erişim için SendGrid'i ayarlayarak başlıyoruz. Zaten bir hesabınız varsa, "API anahtarınızı alma" bölümüne geçin.

Bir Twilio SendGrid hesabı oluşturun:

  1. Twilio SendGrid'in kayıt sayfasına gidin.
  2. Bir kullanıcı adı, şifre ve e-posta adresi oluşturun.
  3. Formun geri kalanıyla devam edin ve ardından "Hesap Oluştur" u tıklayın.

Biraz daha fazla bilgi için başka bir istem olacak ve ardından doğrulama işlemini tamamlamanız gerekecek. Bu çok adımlı doğrulama işlemi, sizin gibi meşru geliştiricilere hizmet verirken kötü niyetli spam göndericileri uzak tutmamıza yardımcı olur.

Hesabınızı doğrulamak için kaydolmak için kullandığınız adrese bir e-posta alacaksınız. Doğrulamayı tamamladığınızda SendGrid panosuna gidin.

API anahtarı alma

Kimlik doğrulaması yapabilmemiz ve API istekleri yapabilmemiz için Twilio SendGrid'den bir API anahtarına ihtiyacımız var.

Kontrol paneline gidin ve "Ayarlar"ı tıklayın. Ardından “API Anahtarları”na tıklayın.

"API Anahtarı Oluştur" düğmesini tıklayın ve API Anahtarını "Flask Hata Raporları" olarak adlandırın. "Kısıtlı Erişim"i seçin.

Ardından, “Posta Gönder” açılır menüsüne tıklayın. Kaydırıcıyı kullanarak “Posta Gönder” seçeneğini etkinleştirin.

En alta gidin ve “Oluştur ve Görüntüle” düğmesini tıklayın. Anahtarı kopyalayın ve ardından güvenli bir yere yapıştırın çünkü onu uygulamamızda kullanacağız.

Python geliştirme ortamı oluşturun

Şimdi kodu yazmadan önce Python ortamımızı kurmamız gerekiyor. Projemiz için yeni bir dizin oluşturacağız ve altında sanal bir ortam oluşturacağız. Ardından sanal ortam içerisinde ihtiyacımız olan Python paketlerini kuruyoruz.

Bir Unix veya Mac OS sistemi kullanıyorsanız, bir terminal açın ve yukarıda açıklanan görevleri yapmak için aşağıdaki komutları girin:

Windows'ta öğreticiyi izleyenleriniz için, bir komut istemi penceresine aşağıdaki komutları girin:

Son komut, bu projede kullanacağımız iki paketi kurmak için Python paket yükleyicisi olan pip kullanır:

  • Flask, web uygulamaları için bir mikro çerçevedir.
  • Flask, ortam değişkenlerini yönetmek için isteğe bağlı olarak python-dotenv kullanabilir, bu nedenle bu paketi de kuruyoruz.

Not: SendGrid kitaplığı, resmi Twilio SendGrid Python API istemcisidir.

Flask uygulamasını ayarlama

Artık temel Flask uygulamamız için kod yazmaya başlayabiliriz. Önceki adımda flask-error-alerts dizinine gidin ve istediğiniz düzenleyiciyi başlatın. İki dosya oluşturacağız:

  1. .env
  2. app.py

İlk dosyaya “dot-env” dosyamız denir. Bir önceki adımdaki SendGrid API anahtarımızı ve Flask uygulamamız için diğer yapılandırma değerlerini buraya yerleştireceğiz. İkinci dosya Flask uygulamamızın bulunacağı yerdir. Şimdi bu dosyalarda bazı değişiklikler yapalım ve Flask uygulamamızı test edelim.

.env dosyasını aşağıdakileri içerecek şekilde düzenleyin:

Aşağıdakileri içerecek şekilde app.py'yi düzenleyin:

Artık uygulamanın çalışmasını beklendiği gibi kontrol edebiliriz. Virtualenv'imizin aktif olduğundan emin olmak için bir terminal açın ve ardından Flask uygulamasını yerleşik geliştirme sunucusuyla çalıştıracağız:

Ardından, tarayıcımızda localhost:5000/'e gidelim ve “Helloworld!” ifadesini görüp görmediğimizi kontrol edelim. Metin.

Yukarıdaki ekran görüntüsündeki gibi bir ekran görürseniz gitmeye hazırsınız.

SendGrid ile uyarıları yapılandırma

İşlenmeyen bir özel durum oluşturma

Şimdi Flask uygulamasını, işlenmeyen istisnalar olduğunda e-posta uyarıları gönderecek şekilde yapılandırmamız gerekiyor. Yapacağımız ilk şey, işlenmeyen bir istisna atmak için app.py değiştirmek.

Artık işlenmeyen bir istisnanın oluştuğu bir durum yarattığımıza göre, uygulamayı yeniden başlatalım ve mevcut davranışı gözlemleyelim. Flask uygulamasını durdurmak için “Ctrl+C” tuşlarını kullanın ve tekrar başlayalım:

Şimdi, localhost:5000/'e gittiğimizde, 500 dahili sunucu alıyoruz – uh oh! Ancak beklediğimiz buydu; aynısı bir hata nedeniyle çöken bir uygulamada da olacak.

Flask işlenmeyen istisnalara takılmak

Flask'ın yerleşik istisna işleyicisine bağlanmamıza izin verecek bir kod eklememiz gerekiyor, böylece uygulama işlenmeyen bir istisnaya yanıt olarak bir e-posta gönderecek. Bunu yaptıktan sonra, istisna hakkında bir e-posta göndermek için SendGrid'i kullanabileceğiz. Bu metin düzenleyiciyi çalıştırın ve bu kodu app.py dosyasına ekleyelim :

Flask'ın yerleşik hata işleyicileri vardır (bununla ilgili daha fazla bilgiyi buradan okuyun). Flask uygulamasıyla bir işlevi kaydetmek için @app.errorhandler dekoratörünü kullanırız. Uygulamamızda belirli türde hatalar oluştuğunda çalıştırılan bir işlevi kaydetmemize izin vermesi dışında @app.route dekoratörüne oldukça benzer. Bu durumda InternalServerError istisnasına dikkat ediyoruz. Bu, Flask ve onun altında yatan yardımcı program kitaplığı Werkzeug'un işlenmeyen bir istisna oluştuğunda ortaya çıkardığı istisnadır.

Not: Geri izleme bilgilerini almak için Python'un yerleşik geri izleme modülünü kullanıyoruz. error_tb adlı oluşturduğumuz değişken, geri izlemeyi içeren bir dizedir. Bu geri izleme, Flask uygulamasında işlenmeyen istisna oluştuğunda terminalde gördüğümüzle tamamen aynıdır. Bu bilgiyi bir sonraki bölümde SendGrid e-postamıza ileteceğiz.

Ayrıca app.finalize_request yöntemine bir çağrı ekledik. Bu, Flask uygulamamızın varsayılan davranışını korur: işlenmeyen bir istisna oluştuğunda, tarayıcıya dahili sunucu hata yanıtını yine de döndürürüz.

Uyarı e-postasını SendGrid ile gönderme

Artık uyarı e-postasını göndermek için kodu ayarlayabileceğimiz noktadayız. Bunu, app.py'yi aşağıdakileri içerecek şekilde güncelleyerek yapalım:

SendMail Mail nesnesini oluşturan create_message adında bir fonksiyon ekledik. Bu nesne, .env dosyasından FROM_EMAIL ve TO_EMAIL çeker. Bununla birlikte, .env dosyamıza aşağıdaki satırları eklememiz gerektiğini söyledi:

Değerleri yüklemek için .env dosyasını kullandığımız için dotenv modülünün load_dotenv işlevine bir çağrı eklemek zorunda kaldık. Bu, kodumuz çalıştığında gerekli ortam değişkenlerinin uygulama kodumuzda mevcut olmasını sağlar.

En üste yakın bir yerde SendGrid API istemcisinin bir örneğini oluşturduk:

Bu istemci otomatik olarak SENDGRID_API_KEY adlı bir ortam değişkeni arar ve bunu SendGrid sunucularında kimlik doğrulaması yapmak için kullanır. .env dosyamızdaki diğer değişkenlerde olduğu gibi load_dotenv çağrısı, değişkenin işlemin ortamına aktarılmasını sağlar.

Bu bölümdeki dikkate değer son ekleme SendGrid API çağrısıdır:

Bu kod bloğunda olan tek şey, SendGrid kullanarak e-postayı göndermeye çalışmamızdır, ancak bir istisna olursa, sadece hatanın ne olduğunu yazdırırız. Bir üretim uygulamasında bu işlemi yeniden denemek isteyebilirsiniz, çünkü buradaki en olası hata kaynağı SendGrid hizmetinin geçici olarak kullanılamamasıdır.

Uyarıları test etme

Kodunuzda değişiklikleri yaptıktan sonra, hadi test edelim! Dolayısıyla buradaki beklenti, localhost:5000/ adresindeki Flask uygulamamızı ziyaret etmemizdir.

  1. Tarayıcıda bir 500 dahili sunucu hatası alın.
  2. Geri izlemeyi içeren bir e-posta uyarısı alın.

Değişikliklerimizin etkili olması için Flask uygulamasını yeniden başlatmamız gerektiğini test etmek için. Bu nedenle, Flask geliştirme sunucunuz çalışıyorsa, bunu “Ctrl+C” ile durdurun ve ardından şununla yeniden başlatın:

Şimdi localhost:5000/'e gidelim ve 500 dahili sunucu hatasını alalım. Bir veya iki dakika sonra aşağıdakine benzer bir e-posta alacaksınız:

Çözüm

İşte aldın! Nispeten az miktarda kod içeren oldukça kullanışlı bir uyarı sistemi oluşturduk. Flask uygulamamız artık işlenmeyen istisnalar meydana geldiğinde e-posta uyarıları gönderecek.

Bu öğreticiyi takip etmekten keyif aldığınızı umarız ve herhangi bir sorunuz varsa bize ulaşmaktan çekinmeyin. Bu eğitimde geliştirilen tüm kodlar burada bulunabilir.