رسائل البريد الإلكتروني لتقرير الخطأ المخصص لتطبيقات الويب Python Flask مع Twilio SendGrid

نشرت: 2020-05-18

كلما أسرعت في معرفة الخطأ الذي طرحه تطبيق الويب Python في الإنتاج ، زادت سرعة حله. سيوضح لك هذا المنشور كيفية إرسال رسائل بريد إلكتروني مخصصة للإبلاغ عن الاستثناءات باستخدام Twilio SendGrid لتطبيقات الويب Flask المبنية من Python.

متطلبات البرنامج التعليمي

ستحتاج إلى البرنامج التالي للعمل من خلال هذا البرنامج التعليمي:

  • Python 3.6 أو أحدث. إذا كان نظام التشغيل الخاص بك لا يوفر مترجم Python ، فيمكنك الانتقال إلى python.org لتنزيل برنامج التثبيت.
  • حساب Twilio SendGrid. ستتناول هذه المقالة إعداد ذلك إذا لم يكن لديك حساب بالفعل. يسمح لك حساب SendGrid المجاني بإرسال ما يصل إلى 100 بريد إلكتروني يوميًا إلى الأبد.

باستخدام Twilio SendGrid

نبدأ بإعداد SendGrid للوصول الآلي. إذا كان لديك حساب بالفعل ، فانتقل إلى قسم "الحصول على مفتاح API الخاص بك".

قم بإنشاء حساب Twilio SendGrid من خلال:

  1. التوجه إلى صفحة التسجيل في Twilio SendGrid.
  2. قم بإنشاء اسم مستخدم وكلمة مرور وعنوان بريد إلكتروني.
  3. تابع باقي النموذج ثم انقر على "إنشاء حساب".

ستكون هناك مطالبة أخرى لمزيد من المعلومات وبعد ذلك ستحتاج إلى إنهاء عملية التحقق. تساعدنا عملية التحقق المتعددة الخطوات هذه على إبعاد مرسلي البريد العشوائي الضار أثناء خدمة المطورين الشرعيين مثلك.

ستتلقى بريدًا إلكترونيًا على العنوان الذي استخدمته للتسجيل للتحقق من حسابك. انتقل إلى لوحة معلومات SendGrid عند الانتهاء من التحقق.

الحصول على مفتاح API

نحتاج إلى مفتاح API من Twilio SendGrid حتى نتمكن من المصادقة وتقديم طلبات API.

انتقل إلى لوحة التحكم وانقر على "الإعدادات". ثم انقر فوق "API Keys".

انقر فوق الزر "إنشاء مفتاح واجهة برمجة التطبيقات" وقم بتسمية مفتاح واجهة برمجة التطبيقات "تقارير أخطاء القارورة". حدد "وصول مقيد".

بعد ذلك ، انقر فوق القائمة المنسدلة "إرسال البريد". قم بتمكين خيار "إرسال البريد" باستخدام شريط التمرير.

قم بالتمرير إلى أسفل وانقر فوق الزر "إنشاء وعرض". انسخ المفتاح ثم الصقه في مكان آمن لأننا سنستخدمه في تطبيقنا.

قم بإنشاء بيئة تطوير Python

نحتاج الآن إلى إعداد بيئة Python الخاصة بنا قبل كتابة الكود. سننشئ دليلًا جديدًا لمشروعنا وننشئ بيئة افتراضية تحته. نقوم بعد ذلك بتثبيت حزم Python التي نحتاجها داخل البيئة الافتراضية.

إذا كنت تستخدم نظام التشغيل Unix أو Mac OS ، فافتح Terminal وأدخل الأوامر التالية للقيام بالمهام الموضحة أعلاه:

لأولئك منكم الذين يتابعون البرنامج التعليمي على Windows ، أدخل الأوامر التالية في نافذة موجه الأوامر:

يستخدم الأمر الأخير pip ، مثبت حزمة Python ، لتثبيت الحزمتين اللتين سنستخدمهما في هذا المشروع ، وهما:

  • Flask هو إطار مصغر لتطبيقات الويب.
  • يمكن أن يستخدم Flask اختياريًا python-dotenv لإدارة متغيرات البيئة ، لذلك نقوم أيضًا بتثبيت هذه الحزمة.

ملاحظة: مكتبة SendGrid هي عميل Twilio SendGrid Python API الرسمي.

إعداد تطبيق Flask

يمكننا الآن البدء في كتابة الكود الخاص بتطبيق Flask الأساسي. انتقل إلى دليل flask-error-alerts في الخطوة السابقة وابدأ المحرر الذي تختاره. سنقوم بإنشاء ملفين:

  1. .env
  2. app.py

يُطلق على الملف الأول اسم ملف "dot-env" الخاص بنا. سنضع مفتاح SendGrid API الخاص بنا من الخطوة السابقة هنا ، بالإضافة إلى قيم التكوين الأخرى لتطبيق Flask الخاص بنا. الملف الثاني هو مكان تطبيق Flask الخاص بنا. دعونا نجري بعض التغييرات على هذه الملفات ونختبر تطبيق Flask الخاص بنا.

قم بتحرير ملف .env ليحتوي على:

تحرير app.py لاحتواء:

الآن يمكننا التحقق من تشغيل التطبيق كما هو متوقع. افتح Terminal للتأكد من أن virtualenv الخاصة بنا نشطة ، ثم سنقوم بتشغيل تطبيق Flask مع خادم التطوير المدمج:

بعد ذلك ، دعنا ننتقل في متصفحنا إلى localhost: 5000 / وتحقق من أننا نرى "Helloworld!" نص.

من الجيد أن تذهب إذا رأيت شاشة مثل تلك الموجودة في لقطة الشاشة أعلاه.

تكوين التنبيهات باستخدام SendGrid

إنشاء استثناء غير معالج

نحتاج الآن إلى تكوين تطبيق Flask لإرسال تنبيهات بالبريد الإلكتروني عند وجود استثناءات لم تتم معالجتها. أول شيء سنفعله هو تعديل app.py استثناء غير معالج.

الآن وقد أنشأنا موقفًا يحدث فيه استثناء غير معالج ، فلنقم بإعادة تشغيل التطبيق ومراقبة السلوك الحالي. استخدم "Ctrl + C" لإيقاف تطبيق Flask ، ولنبدأ مرة أخرى:

الآن ، عندما ننتقل إلى المضيف المحلي: 5000 / ، نحصل على 500 خادم داخلي - أه أوه! ولكن هذا ما توقعناه - سيحدث نفس الشيء على تطبيق يتعطل بسبب خطأ.

التثبيت في استثناءات القارورة التي لم تتم معالجتها

نحتاج إلى إضافة بعض التعليمات البرمجية التي تسمح لنا بالربط بمعالج الاستثناء المدمج في Flask حتى يرسل التطبيق بريدًا إلكترونيًا ردًا على استثناء غير معالج. بمجرد القيام بذلك ، سنتمكن من استخدام SendGrid لإرسال بريد إلكتروني حول الاستثناء. أطلق محرر النصوص ودعنا نضيف هذا الرمز إلى app.py :

يحتوي Flask على معالجات أخطاء مضمنة (اقرأ المزيد عن ذلك هنا). نستخدم @app.errorhandler decorator لتسجيل وظيفة في تطبيق Flask. إنه مشابه تمامًا @app.route باستثناء أنه يسمح لنا بتسجيل وظيفة يتم تنفيذها عند حدوث أنواع معينة من الأخطاء في تطبيقنا. في هذه الحالة ، نولي اهتمامًا لاستثناء InternalServerError . هذا هو الاستثناء الذي يقوم به Flask ومكتبة الأداة المساعدة الأساسية Werkzeug في رفعه كلما حدث استثناء لم تتم معالجته.

ملاحظة: نحن نستخدم وحدة التتبع المضمنة في Python لاسترداد معلومات التتبع. المتغير الذي أنشأناه والمسمى error_tb هو سلسلة تحتوي على traceback. هذا التتبع هو بالضبط نفس ما نراه في الجهاز عند حدوث استثناء غير معالج في تطبيق Flask. سنقوم بتمرير هذه المعلومات إلى بريدنا الإلكتروني SendGrid في القسم التالي.

أضفنا أيضًا مكالمة إلى طريقة app.finalize_request . يحافظ هذا على السلوك الافتراضي لتطبيق Flask الخاص بنا: عند حدوث استثناء غير معالج ، سنستمر في إرجاع استجابة خطأ الخادم الداخلي إلى المتصفح.

إرسال بريد إلكتروني للتنبيه باستخدام SendGrid

نحن الآن في المرحلة حيث يمكننا إعداد الرمز لإرسال البريد الإلكتروني للتنبيه. لنفعل ذلك عن طريق تحديث app.py لاحتواء ما يلي:

لقد أضفنا وظيفة تسمى create_message تقوم بإعداد كائن SendMail Mail . يسحب هذا الكائن في FROM_EMAIL و TO_EMAIL من ملف .env. مع ذلك ، نحتاج إلى إضافة الأسطر التالية إلى ملف .env الخاص بنا:

نظرًا لأننا نستخدم ملف .env لتحميل القيم ، فقد اضطررنا أيضًا إلى إضافة استدعاء إلى وظيفة load_dotenv الخاصة بوحدة load_dotenv . هذا يضمن أنه عند تشغيل الكود الخاص بنا ، ستكون متغيرات البيئة المطلوبة متاحة في كود التطبيق الخاص بنا.

بالقرب من القمة ، أنشأنا مثيلًا لعميل SendGrid API:

يبحث هذا العميل تلقائيًا عن متغير بيئة يسمى SENDGRID_API_KEY ويستخدمه للمصادقة على خوادم SendGrid. كما هو الحال مع المتغيرات الأخرى في ملف .env الخاص بنا ، يضمن استدعاء load_dotenv استيراد المتغير إلى بيئة العملية.

آخر إضافة جديرة بالملاحظة في هذا القسم هي استدعاء SendGrid API:

كل ما يحدث في كتلة التعليمات البرمجية هو أننا نحاول إرسال البريد الإلكتروني باستخدام SendGrid ولكن في حالة حدوث استثناء ، فإننا نقوم فقط بطباعة الخطأ. في تطبيق الإنتاج ، قد ترغب في إعادة محاولة هذه العملية لأن مصدر الخطأ الأكثر احتمالاً هنا هو أن خدمة SendGrid غير متاحة مؤقتًا.

اختبار التنبيهات

بمجرد إجراء التغييرات على التعليمات البرمجية الخاصة بك ، دعنا نختبرها! لذا فإن التوقع هنا هو أن نزور تطبيق Flask الخاص بنا على المضيف المحلي: 5000 / سنقوم بما يلي:

  1. تلقي خطأ خادم داخلي 500 في المتصفح.
  2. تلقي تنبيه بالبريد الإلكتروني يحتوي على التتبع.

لاختبار أننا بحاجة إلى إعادة تشغيل تطبيق Flask حتى تسري التغييرات التي أجريناها. لذلك إذا كان لديك خادم تطوير Flask قيد التشغيل ، فقم بإيقاف ذلك باستخدام "Ctrl + C" ثم أعد تشغيله باستخدام:

الآن دعنا ننتقل إلى localhost: 5000 / ونتلقى خطأ الخادم الداخلي 500. بعد دقيقة أو دقيقتين ، ستتلقى بريدًا إلكترونيًا يشبه ما يلي:

خاتمة

ها أنت ذا! لقد أنشأنا نظام تنبيه سهل الاستخدام بكمية صغيرة نسبيًا من التعليمات البرمجية. سيرسل تطبيق Flask الآن تنبيهات بالبريد الإلكتروني عند حدوث استثناءات لم تتم معالجتها.

نأمل أن تكون قد استمتعت بمتابعة هذا البرنامج التعليمي وإذا كانت لديك أي أسئلة فلا تتردد في التواصل معنا. يمكن العثور على جميع التعليمات البرمجية التي تم تطويرها في هذا البرنامج التعليمي هنا.