Python >> Tutoriel Python >  >> Python

Développement Web Python avec Flask — Gestion des erreurs

Flask est un framework Web simple écrit en Python.

Dans cet article, nous verrons comment développer des applications Web Python simples avec Flask.

Erreurs d'application

Nous pouvons ajouter nos propres gestionnaires d'erreurs dans notre application Flask.

Par exemple, nous pouvons écrire :

from flask import Flask, abort
import werkzeug
app = Flask(__name__)

@app.errorhandler(werkzeug.exceptions.BadRequest)
def handle_bad_request(e):
    return 'bad request!', 400

@app.route('/')
def hello_world():
    return abort(400)

Nous ajoutons un gestionnaire pour gérer 400 erreurs.

Le gestionnaire est enregistré avec le app.errorhandler décorateur.

Le werkzeug.exceptions.BadRequest signifie que nous l'utilisons pour gérer 400 erreurs.

Nous retournons une erreur 400 dans le hello_world route, nous devrions donc voir "mauvaise requête !" renvoyée avec la réponse.

De manière équivalente, nous pouvons écrire :

from flask import Flask, abort
import werkzeug
app = Flask(__name__)

def handle_bad_request(e):
    return 'bad request!', 400

app.register_error_handler(400, handle_bad_request)

@app.route('/')
def hello_world():
    return abort(400)

pour enregistrer le gestionnaire d'erreurs.

Nous pouvons également enregistrer des gestionnaires d'erreurs pour les codes d'état non standard.

Pour ce faire, il suffit de créer une classe qui étend werkzeug.exceptions.HTTPException .

Par exemple, nous pouvons écrire :

from flask import Flask, abort
import werkzeug
app = Flask(__name__)

class InsufficientStorage(werkzeug.exceptions.HTTPException):
    code = 507
    description = 'Not enough storage space.'

def handle_507(e):
    return 'Not enough storage space.', 507

app.register_error_handler(InsufficientStorage, handle_507)

@app.route('/')
def hello_world():
    raise InsufficientStorage()

pour créer le InsufficientStorage classe d'exception.

Nous définissons le code et description variables d'instance avec le code d'état et la description respectivement.

Ensuite, nous appelons app.register_error_handler pour enregistrer le gestionnaire d'erreurs.

Gestionnaires d'exceptions génériques

Nous pouvons créer des gestionnaires d'exceptions génériques.

Par exemple, nous pouvons écrire :

from werkzeug.exceptions import HTTPException
from flask import json
from flask import Flask, abort
app = Flask(__name__)

@app.errorhandler(HTTPException)
def handle_exception(e):
    response = e.get_response()
    response.data = json.dumps({
        "code": e.code,
        "name": e.name,
        "description": e.description,
    })
    response.content_type = "application/json"
    return response

@app.route('/')
def hello_world():
    return abort(400)

Nous ajoutons le handle_exception fonction avec le app.errorhandler décorateur pour enregistrer le gestionnaire d'exceptions.

Dans la fonction, nous créons le response objet du e.get_response méthode.

Ensuite, nous définissons le response.data propriété pour définir les données de réponse.

Nous utilisons json.dumps pour convertir le dictionnaire en chaîne.

Exceptions non gérées

Les exceptions non gérées sont renvoyées sous forme d'erreurs 500.

Nous pouvons ajouter un gestionnaire d'erreurs 500 pour intercepter les exceptions gérées et non gérées.

Par exemple, nous pouvons écrire :

from werkzeug.exceptions import InternalServerError
from flask import json
from flask import Flask, abort
app = Flask(__name__)

@app.errorhandler(InternalServerError)
def handle_500(e):
    original = getattr(e, "original_exception", None)
    if original is None:
        return 'handled error'
    return 'unhandled error', 500

@app.route('/')
def hello_world():
    raise Exception()
    return 'hello'

Nous ajoutons le handle_500 fonction pour gérer les erreurs gérées et non gérées.

Le original la variable étant None signifie qu'il s'agit d'une erreur gérée.

Sinon, c'est une erreur non gérée.

Depuis que nous avons levé une exception générique dans le hello_world fonction, nous devrions voir 'unhandled error' dans la réponse.

Conclusion

Nous pouvons détecter et gérer les erreurs générées dans les applications Flask.