Message d'erreur personnalisé objet json avec flacon-sommeil
Il est facile de propager des messages d'erreur avec flacon reposant pour le client avec la abort()
méthode, telle que
abort(500, message="Fatal error: Pizza the Hutt was found dead earlier today
in the back seat of his stretched limo. Evidently, the notorious gangster
became locked in his car and ate himself to death.")
Cela va générer à la suite de la sortie json
{
"message": "Fatal error: Pizza the Hutt was found dead earlier today
in the back seat of his stretched limo. Evidently, the notorious gangster
became locked in his car and ate himself to death.",
"status": 500
}
Est-il un moyen de personnaliser la sortie json avec d'autres membres? Par exemple:
{
"sub_code": 42,
"action": "redirect:#/Outer/Space"
"message": "You idiots! These are not them! You've captured their stunt doubles!",
"status": 500
}
Vous devez vous connecter pour publier un commentaire.
Les gens ont tendance à abuser de
abort()
, alors qu'en fait c'est très simple pour générer vos propres erreurs. Vous pouvez écrire une fonction qui génère des messages d'erreur personnalisés facilement, en voici un qui correspond à votre JSON:Alors au lieu de l'appeler
abort()
ce faire:Je n'ai pas de 50 points de réputation à commenter @dappiu, je viens donc d'écrire une nouvelle réponse, mais c'est vraiment lié à "Flacon-Sommeil réussi à fournir un moyen le plus propre pour gérer les erreurs" comme très mal documenté ici
C'est un mauvais document qui m'a pris un certain temps à comprendre comment l'utiliser. La clé, c'est votre coutume exception doit hériter de flask_restful importation HTTPException. Veuillez noter que vous ne pouvez pas utiliser Python Exception.
Flacon-Sommeil de l'équipe a fait un bon travail pour faire d'exception personnalisée manipulation facile, mais la documentation de la ruine de l'effort.
class UserAlreadyExistsError(Exception)
est assez sans importer HTTPException de flask_restfulfalse
).@Miguel code est ce que vous devriez être en utilisant la plupart du temps: pas d'exception, il suffit de retourner une réponse dans une branche de la demande du gestionnaire. Toutefois, si vous avez vraiment besoin d'un abandon mécanisme qui lève une exception (ce qui peut être utile dans les méthodes de filtrage, par exemple), il faut noter que flacon.abandonner accepte un Réponse objet (cochez cette gist):
Je devais définir l'attribut
code
à mon sous-classéHttpException
pour cette coutume de gestion d'erreur pour fonctionner correctement:et puis, plus tard, lever l'exception
C'est évidemment la fin, mais dans l'intervalle Flacon-Sommeil réussi à fournir un moyen le plus propre pour gérer les erreurs, comme l'a souligné le docs.
Également la question ouvert à suggérer l'amélioration peut vous aider.
NameError: global name 'InvalidEmailError' is not defined
. J'ai mes erreurs définie dans mon paquet init.py fichier et je suis en train deraise InvalidEmailError
dans un views.py fichier qui vit juste à côté de mon init.py - toute idée de pourquoi je suisNameError
?Voici une très simple et propre, la fonction de base. Il est similaire à @Miguel, mais il est moins spécialisées et reste cohérente avec la Fiole de l'utilisation prévue des
abort()
. L'utilisation d'exceptions pour le contrôle de flux n'est pas un anti-modèle en Python et est en fait encouragé. Par conséquent, on pourrait dire que l'augmentation de l'exception plutôt que de retourner, il doit le plus souvent être le chemin à parcourir, surtout depuis que le cadre a des réserves pour eux.Maintenant, vous pouvez l'étendre et de le personnaliser comme vous voulez.