Python >> Tutoriel Python >  >> Python

Comment signaler des erreurs dans les applications Web Flask avec Sentry

Les applications Web Flask sont hautement personnalisables par les développeurs grâce à l'architecture basée sur les extensions du framework, mais cette flexibilité peut parfois entraîner davantage d'erreurs lorsque vous exécutez l'application en raison des aspérités entre les bibliothèques.

Le signalement des erreurs est essentiel pour exécuter une application Web Flask qui fonctionne bien. Ce didacticiel vous guidera donc tout au long de l'ajout d'une configuration Sentry de base gratuite à un nouveau projet Flask.

Exigences du didacticiel

Assurez-vous que Python 3 est installé, car Python 2 a atteint sa fin de vie au début de 2020 et n'est plus pris en charge. De préférence, vous devriez avoir Python 3.7 ou supérieur installé dans votre environnement de développement.

  • Frame Web Flask, version 1.1.2
  • une instance Sentry hébergée sur sentry.io, à laquelle nous aurons besoin d'un compte pour accéder
  • la bibliothèque d'assistance Sentry Python pour envoyer des données d'exception à notre instance Sentry, avec l'intégration de Flask

Tout le code de cet article de blog est disponible en open source sous la licence MIT sur GitHub sous le répertoire report-errors-flask-web-apps-sentry du référentiel blog-code-examples. Utilisez le code source comme vous le souhaitez pour vos propres projets.

Configuration de l'environnement de développement

Accédez au répertoire dans lequel vous conservez vos environnements virtuels Python.Créez un nouvel environnement virtuel pour ce projet à l'aide de la commande suivante.

Installez les bibliothèques de code Flask et Sentry-SDK dans un nouvel environnement virtuel Python à l'aide des commandes suivantes :

python -m venv sentryflask
source sentryflask/bin/activate

pip install flask>=1.1.2 sentry-sdk[flask]==0.15.1

Notez que nous avons installé l'intégration Flask dans le cadre de SentrySDK, c'est pourquoi la dépendance est sentry-sdk[flask] plutôt que juste sentry-sdk .

Maintenant que toutes nos dépendances sont installées, nous pouvons coder une petite application pour montrer comment fonctionne le rapport d'erreurs.

Création de l'application

Nous avons tout ce dont nous avons besoin pour commencer à créer notre application. Créez un nouveau répertoire pour votre projet. J'ai appelé minereport-errors-flask-web-apps-sentry dans le référentiel d'exemples, mais vous pouvez utiliser un nom plus court si vous préférez. Ouvrez un nouveau fichier nommé app.py et écrivez-y le code suivant.

# app.py
from flask import Flask, escape, request


app = Flask(__name__)


@app.route('/divide/<int:numerator>/by/<int:denominator>/')
def hello(numerator, denominator):
    answer = numerator / denominator
    return f'{numerator} can be divided by {denominator} {answer} times.'

Le code ci-dessus est une courte application Flask qui permet la saisie via l'URL de deux valeurs entières :un numérateur et un dénominateur.

Enregistrez le fichier et exécutez-le en utilisant le flask run commande :

env FLASK_APP=app.py flask run

Si vous voyez la sortie suivante sur la ligne de commande, cela signifie que le serveur de développement fonctionne correctement :

 * Serving Flask app "app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Testez-le en allant sur http://localhost:5000/divide/50/by/10/ et vous obtiendrez le résultat suivant dans votre navigateur Web :

Notre application de base fonctionnant, nous pouvons désormais ajouter des rapports d'erreurs pour les situations qui ne fonctionnent pas comme prévu.

Ajout de Sentry à l'application Flask

Il est temps d'ajouter Sentry avec l'intégration de Flask dans le mix, afin que nous puissions facilement voir quand la route se trompe en raison d'une mauvaise entrée.

Sentry peut soit être auto-hébergé, soit être utilisé comme service cloud via Sentry.io. Dans ce didacticiel, nous utiliserons la version hébergée dans le cloud car elle est plus rapide que la configuration de votre propre serveur et gratuite pour les petits projets.

Accédez à la page d'accueil de Sentry.io.

Connectez-vous à votre compte ou créez un nouveau compte gratuit. Vous serez sur le tableau de bord du compte principal après vous être connecté ou avoir terminé le processus d'inscription Sentry.

Il n'y a pas encore d'erreurs enregistrées sur le tableau de bord de notre compte, ce qui est normal car nous n'avons pas encore connecté notre compte à notre application Python.

Vous souhaiterez créer un nouveau projet Sentry uniquement pour cette application. Cliquez donc sur "Projets" dans la barre latérale gauche pour accéder à la page Projets.

Sur la page Projets, cliquez sur le bouton "Créer un projet" dans le coin supérieur droit de la page.

Vous pouvez choisir "Flask" ou sélectionner "Python". Je choisis généralement "Python" si je ne sais pas encore quel framework je vais utiliser pour construire mon application. Ensuite, donnez un nom à votre nouveau projet, puis appuyez sur le bouton "Créer un projet". Notre nouveau projet est prêt à être intégré à notre code Python.

Nous avons besoin de l'identifiant unique de notre compte et de notre projet pour autoriser notre code Python à envoyer des erreurs à cette instance Sentry. Le moyen le plus simple d'obtenir ce dont nous avons besoin est d'aller sur la page de documentation de Python+Flask et de lire comment configurer le SDK.

Copiez le paramètre de chaîne pour le init et définissez-la comme une variable d'environnement plutôt que de l'exposer dans le code de votre projet.

export SENTRY_DSN='https://yourkeygoeshere.ingest.sentry.io/project-number'

Assurez-vous de remplacer "votreclévaici" par votre propre identifiant unique et "numéro de projet" par l'ID qui correspond au projet que vous venez de créer.

Vérifiez que le SENTRY_DSN est défini correctement dans votre shell en utilisant le echo commande :

echo $SENTRY_DSN

Mettre à jour app.py avec les lignes de code en surbrillance suivantes.

# app.py                                                                                                                                                                                
import os
import sentry_sdk
from flask import Flask, escape, request
from sentry_sdk.integrations.flask import FlaskIntegration


sentry_sdk.init(
    dsn=os.getenv('SENTRY_DSN'), integrations=[FlaskIntegration()]
)


app = Flask(__name__)


@app.route('/divide/<int:numerator>/by/<int:denominator>/')
def hello(numerator, denominator):
    answer = numerator / denominator
    return f'{numerator} can be divided by {denominator} {answer} times.'

Les nouvelles lignes de code ci-dessus initialisent le client Sentry et lui permettent d'envoyer correctement toutes les erreurs qui se produisent au bon service Sentry.

Tester l'intégration de Sentry

Le tableau de bord Sentry indique que le service attend toujours des événements.

Faisons une erreur pour voir si nous avons correctement connecté l'intégration de Flask à notre application.

Essayez de diviser par zéro, en vous rendant sur http://localhost:5000/divide/50/by/0/ dans votre navigateur Web. Vous devriez obtenir une "Erreur de serveur interne".

De retour dans le tableau de bord Sentry, l'erreur apparaît dans la liste.

Nous pouvons explorer l'erreur en cliquant dessus et obtenir une tonne d'informations supplémentaires, non seulement sur notre application, mais également sur le client qui a visité le site. Ceci est pratique si vous rencontrez un problème avec un navigateur spécifique ou un autre type de client lors de la création d'une API.

Une fois cela en place, vous pouvez maintenant créer le reste de votre application Flask en sachant que toutes les exceptions seront suivies dans Sentry.

Quelle est la prochaine ?

Nous venons de terminer la création d'une application Flask pour montrer à quelle vitesse la version hébergée de Sentry peut être ajoutée aux applications afin que vous ne perdiez pas la trace de vos messages d'erreur.

Ensuite, vous pouvez essayer l'un de ces tutoriels pour ajouter d'autres fonctionnalités utiles à votre nouvelle application :

  • Répondre aux SMS avec Python et Flask
  • Développer et exécuter des applications Flask dans des conteneurs Docker
  • Ajouter l'authentification Okta à une application Flask existante

Vous pouvez également déterminer ce qu'il faut coder ensuite dans votre projet Python en lisant la page de table des matières Full Stack Python.

Des questions? Contactez-moi via Twitter@fullstackpythonor @mattmakai. Je suis également sur GitHub avec le nom d'utilisateur mattmakai.

Si vous voyez un problème ou une erreur dans ce didacticiel, veuillez forker le référentiel source sur GitHuband et soumettre une demande d'extraction avec le correctif.