Repérez les erreurs les plus communes dans un projet Django
Django est un framework puissant permettant de créer des sites web et des API. Il peut évidemment générer des exceptions Python standards. Mais Django possède aussi sa propre liste d’exceptions que vous retrouverez dans sa documentation.
Nous pouvons les ranger en 7 catégories :
Exceptions principales de Django : Les exceptions générales, propres au fonctionnement de Django. Par exemple, un champ erroné, un middleware inutilisé ou une view qui n’existe pas.
Exceptions du résolveur d’URL : Ces exceptions sont levées si l’utilisateur cherche un endpoint qui n’existe pas.
Exceptions de base de données : Elles sont levées quand vous travaillez avec une base de données. Par exemple, si elle reçoit une valeur erronée pour un champ.
Exceptions HTTP : Une exception peut être levée si Django envoie ou reçoit des requêtes erronées au travers du protocole HTTP. Par exemple, l’annulation d’un téléchargement par l’utilisateur.
Sessions Exceptions : Les exceptions qui concernent la gestion des sessions par Django. Elle peut être générée si une session est supprimée dans une requête HTTP juste avant qu’une autre requête essaie d’accéder à la session.
Exceptions de transaction : Il s’agit des exceptions liées aux transactions avec la base de données. Elle peut être générée lorsqu’il y a une erreur de transaction de base de données.
Exceptions de l’infrastructure de test : Une exception sera levée si le client de test de Django détecte des erreurs, comme par exemple une chaîne de redirection trop longue.
Partons à la découverte de quelques exceptions Django dans le screencast ci-dessous :
Dans ce screencast, nous nous sommes arrêtés sur deux erreurs classiques : TemplateDoesNotExist
et PageNotFound
.
Je vous encourage vivement à prendre le temps de lire la documentation. Cela vous fera gagner beaucoup de temps. En effet, tout comme les exceptions Python standards, les exceptions Django donnent des indications sur la cause et la nature du bug.
Enfin, je citerai Stack Overflow (en anglais) !
Il vous suffit de taper Django pour voir apparaître la liste des questions posées contenant ce tag. Pourquoi ne pas consulter les réponses données dans Stack Overflow ? Vous verrez, c’est très instructif.
Repérez les erreurs les plus communes dans un projet Flask
Tout comme Django, Flask possède ses propres exceptions en plus des exceptions Python standards. Quand une exception Flask est levée, une stack trace est générée avec un certain nombre d’informations utiles. Vous aurez davantage d'informations si la variable debug
est à True
comme à la ligne 11 de l’image ci-dessous :
![À la ligne 11, nous mettons à True le paramètre debug pour obtenir davantage d’informations lors de la levée d’une exception.](https://user.oc-static.com/upload/2021/07/07/16256656690151_image6.png)
Il ne faut néanmoins pas oublier de la repasser à False
avant de mettre l’application en production, car le mode True
sert à la phase de développement. Un utilisateur paniquera s'il voit tous ces messages d’erreurs incompréhensibles pour lui !
![Un exemple de niveau de détails que nous obtenons quand le paramètre de debug est à True.](https://user.oc-static.com/upload/2021/07/07/16256657603958_image10.png)
Si vous tapez “exception” dans la barre de recherche du site officiel de Flask, vous tomberez sur un ensemble de liens vous expliquant la nature de certaines des erreurs :
![Les résultats de notre recherche exception sur le site officiel de Flask](https://user.oc-static.com/upload/2021/07/07/16256658415434_image11.png)
Voici quelques erreurs classiques :
Internal server error Flask : Cette erreur très classique apparaît quand nous faisons une erreur de syntaxe au niveau d’une route.
routing_exception : Si la correspondance entre les routes du programme et l'URL échoue, cette exception sera levée. C’est en gros une exception de type NotFound.
Method Not Allowed flask error 405 : Cette exception est souvent levée parce que nous n’avons autorisé que la méthode “GET” et pas “POST” dans le décorateur de la route.
Découvrons quelques erreurs Flask dans le screencast ci-dessous :
Dans ce screencast, nous avons vu l’erreur 404 et 405. Nous avons également vu comment générer nos propres erreurs et les capturer pour les rediriger vers un template spécifique.
La page Stack Overflow de Flask contient de très nombreuses questions fréquemment posées. En voici deux :
Je n’arrive pas à recevoir les données depuis un formulaire HTML via Flask.
Flask ne fonctionne pas sur le port 80.
Je vous encourage à consulter les réponses données dans Stack Overflow. C’est très instructif.
Exercez-vous
Nous venons de voir quelques erreurs parmi les plus communes – mais il y en a des milliers d’autres ! Le site Stack Overflow permet de trouver les réponses à vos questions. Mais pour vous améliorer je vous propose de passer de l’autre côté de la barrière. Autrement dit, je vous encourage à répondre à des questions posées par vos confrères débuggeurs. Je vous encourage même à en faire une habitude. Cela améliorera beaucoup vos compétences de débugging. 😉
En résumé
Django et Flask possèdent des exceptions propres en plus des exceptions de Python standards.
Les documentations de Django et de Flask contiennent des explications sur les causes des exceptions les plus courantes.
Stack Overflow permet de trouver des réponses pour résoudre les bugs les plus courants de Flask et Django.
Maintenant que nous savons lire et comprendre les erreurs, il est temps de les éliminer pour de bon ! Mais d’abord, vérifiez ce que vous avez appris dans cette partie avec un petit quiz !