อีเมลรายงานข้อผิดพลาดที่กำหนดเองสำหรับเว็บแอป 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"

คลิกปุ่ม "สร้างคีย์ API" และตั้งชื่อคีย์ API "รายงานข้อผิดพลาดของขวด" เลือก “จำกัดการเข้าถึง”

ถัดไป คลิกที่ดรอปดาวน์ "ส่งเมล" เปิดใช้งานตัวเลือก "ส่งเมล" โดยใช้แถบเลื่อน

เลื่อนไปที่ด้านล่างแล้วคลิกปุ่ม "สร้างและดู" คัดลอกคีย์แล้ววางในที่ที่ปลอดภัยเพราะเราจะนำไปใช้ในแอปพลิเคชันของเรา

สร้างสภาพแวดล้อมการพัฒนา Python

ตอนนี้เราต้องตั้งค่าสภาพแวดล้อม Python ของเราก่อนที่เราจะเขียนโค้ด เราจะสร้างไดเร็กทอรีใหม่สำหรับโครงการของเราและสร้างสภาพแวดล้อมเสมือนจริงภายใต้นั้น จากนั้นเราจะติดตั้งแพ็คเกจ Python ที่เราต้องการภายในสภาพแวดล้อมเสมือน

หากคุณกำลังใช้ระบบ Unix หรือ Mac OS ให้เปิดเทอร์มินัลแล้วป้อนคำสั่งต่อไปนี้เพื่อทำงานที่อธิบายไว้ข้างต้น:

สำหรับผู้ที่ติดตามบทช่วยสอนบน 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 ให้มี:

ตอนนี้เราสามารถตรวจสอบการทำงานของแอปพลิเคชันได้ตามที่คาดไว้ เปิดเทอร์มินัลเพื่อให้แน่ใจว่า virtualenv ของเราเปิดใช้งานอยู่ จากนั้นเราจะเรียกใช้แอพ Flask ด้วยเซิร์ฟเวอร์การพัฒนาในตัว:

ต่อไป ให้นำทางเบราว์เซอร์ของเราไปที่ localhost:5000/ และตรวจสอบว่าเราเห็น “Helloworld!” ข้อความ.

คุณพร้อมจะไปถ้าคุณเห็นหน้าจอเหมือนในภาพหน้าจอด้านบน

การกำหนดค่าการแจ้งเตือนด้วย SendGrid

การสร้างข้อยกเว้นที่ไม่สามารถจัดการได้

ตอนนี้ เราต้องกำหนดค่าแอปพลิเคชัน Flask เพื่อส่งการแจ้งเตือนทางอีเมลเมื่อมีข้อยกเว้นที่ไม่สามารถจัดการได้ สิ่งแรกที่เราจะทำคือแก้ไข app.py ของเราให้มีข้อยกเว้นที่ไม่สามารถจัดการได้

ตอนนี้ เราได้สร้างสถานการณ์ที่เกิดข้อยกเว้นที่ไม่สามารถจัดการได้ ให้รีสตาร์ทแอปพลิเคชันและสังเกตพฤติกรรมปัจจุบัน ใช้ “Ctrl+C” เพื่อหยุดแอปพลิเคชั่น Flask และเริ่มต้นใหม่อีกครั้ง:

ตอนนี้ เมื่อเราไปที่ localhost:5000/ เราได้รับเซิร์ฟเวอร์ภายใน 500 เซิร์ฟเวอร์ โอ้ โอ้! แต่นี่คือสิ่งที่เราคาดไว้ เช่นเดียวกันจะเกิดขึ้นกับแอปพลิเคชันที่ขัดข้องเนื่องจากข้อบกพร่อง

การเชื่อมต่อกับข้อยกเว้นที่ไม่สามารถจัดการ Flask ได้

เราจำเป็นต้องเพิ่มโค้ดที่ช่วยให้เราเชื่อมต่อกับตัวจัดการข้อยกเว้นในตัวของ Flask เพื่อให้แอปพลิเคชันส่งอีเมลเพื่อตอบสนองต่อข้อยกเว้นที่ไม่สามารถจัดการได้ เมื่อเราทำเสร็จแล้ว เราจะสามารถใช้ SendGrid เพื่อส่งอีเมลเกี่ยวกับข้อยกเว้นได้ เปิดโปรแกรมแก้ไขข้อความและเพิ่มรหัสนี้ใน app.py :

Flask มีตัวจัดการข้อผิดพลาดในตัว (อ่านเพิ่มเติมเกี่ยวกับที่นี่) เราใช้มัณฑนากร @app.errorhandler เพื่อลงทะเบียนฟังก์ชันกับแอปพลิเคชัน Flask มันค่อนข้างคล้ายกับ @app.route มัณฑนากร ยกเว้นว่ามันช่วยให้เราลงทะเบียนฟังก์ชันที่จะถูกดำเนินการเมื่อเกิดข้อผิดพลาดบางประเภทในแอปพลิเคชันของเรา ในกรณีนี้ เรากำลังให้ความสนใจกับข้อยกเว้น InternalServerError นี่เป็นข้อยกเว้นที่ Flask และไลบรารียูทิลิตี้พื้นฐาน Werkzeug จะเพิ่มเมื่อใดก็ตามที่เกิดข้อยกเว้นที่ไม่สามารถจัดการได้

หมายเหตุ: เรากำลังใช้โมดูลการสืบค้นกลับในตัวของ Python เพื่อดึงข้อมูลการสืบค้นกลับ ตัวแปรที่เราสร้างชื่อ error_tb เป็นสตริงที่มีการสืบค้นกลับ การติดตามย้อนกลับนี้เหมือนกับที่เราเห็นในเทอร์มินัลทุกประการเมื่อเกิดข้อยกเว้นที่ไม่สามารถจัดการได้ในแอปพลิเคชัน 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 ของเราที่ localhost:5000/ เราจะไปที่:

  1. รับข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 รายการในเบราว์เซอร์
  2. รับการแจ้งเตือนทางอีเมลที่มีการสืบค้นกลับ

เพื่อทดสอบว่าเราจำเป็นต้องรีสตาร์ทแอปพลิเคชัน Flask เพื่อให้การเปลี่ยนแปลงของเรามีผล ดังนั้น หากคุณมีเซิร์ฟเวอร์การพัฒนา Flask ทำงานอยู่ ให้หยุดการทำงานนั้นด้วย “Ctrl+C” แล้วรีสตาร์ทด้วย:

ตอนนี้ ไปที่ localhost:5000/ และรับข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 รายการ คุณควรได้รับอีเมลที่มีลักษณะดังนี้:

บทสรุป

ที่นั่นคุณมีมัน! เราได้สร้างระบบการแจ้งเตือนที่ค่อนข้างสะดวกด้วยโค้ดจำนวนเล็กน้อย แอปพลิเคชั่น Flask ของเราจะส่งอีเมลแจ้งเตือนทุกครั้งที่เกิดข้อยกเว้นที่ไม่สามารถจัดการได้

เราหวังว่าคุณจะสนุกกับการทำตามบทช่วยสอนนี้ และหากคุณมีคำถามใดๆ โปรดติดต่อเรา รหัสทั้งหมดที่พัฒนาขึ้นในบทช่วยสอนนี้สามารถพบได้ที่นี่