web-dev-qa-db-fra.com

Renvoie 400 erreur comme réponse dans un flask api

J'ai créé une application flask simple et je lis la réponse de python comme:

response = requests.post(url,data=json.dumps(data), headers=headers ) 
data = json.loads(response.text)

Maintenant, mon problème est que, dans certaines conditions, je veux retourner une réponse de 400 ou 500 messages. Jusqu'à présent, je le fais comme ceci:

abort(400, 'Record not found') 
#or 
abort(500, 'Some error...') 

Cela imprime la messa sur le terminal:

enter image description here

Mais dans la réponse de l'API, je garde une réponse d'erreur 500:

enter image description here

ÉDITER:

La structure du code est la suivante:

|--my_app
   |--server.py
   |--main.py
   |--swagger.yml

Où server.py a ce code:

from flask import render_template
import connexion
# Create the application instance
app = connexion.App(__name__, specification_dir="./")
# read the swagger.yml file to configure the endpoints
app.add_api("swagger.yml")
# Create a URL route in our application for "/"
@app.route("/")
def home():
    """
    This function just responds to the browser URL
    localhost:5000/

    :return:        the rendered template "home.html"
    """
    return render_template("home.html")
if __name__ == "__main__":
    app.run(Host="0.0.0.0", port="33")

Et main.py a toutes les fonctions que j'utilise pour les points de terminaison API.

PAR EXEMPLE:

def my_funct():
   abort(400, 'Record not found') 

Lorsque my_funct est appelé, j'obtiens le "Record not found" imprimé sur le terminal, mais pas dans la réponse de l'API elle-même, où j'obtiens toujours l'erreur de 500 messages.

Je pense que vous utilisez correctement la fonction abort(). Je soupçonne que le problème ici est qu'un gestionnaire d'erreurs intercepte l'erreur 400, puis l'erreur, ce qui provoque l'erreur 500. Voir ici pour plus d'informations sur flask traitement des erreurs.

Par exemple, ce qui suit changerait un 400 en une erreur de 500:

@app.errorhandler(400)
def handle_400_error(e):
    raise Exception("Unhandled Exception")

Si vous ne faites aucune gestion d'erreur, cela peut provenir du framework connexion, bien que je ne connaisse pas ce framework.

0
Tim Ludwinski