2017-10-18 3 views
1

Comment puis-je définir le texte d'état HTTP pour une réponse dans Flask?Définir le texte d'état HTTP dans une réponse Flask

Je sais que je peux retourner une chaîne avec un code d'état

@app.route('/knockknock') 
def knockknock(): 
    return "sleeping, try later", 500 

Mais qui définit le corps, je voudrais changer le texte d'état HTTP de « Erreur interne du serveur » à « dormir, essayer plus tard ".

Il semble que ce ne soit pas possible dans Flask/Werkzeug. Ce n'est pas mentionné nulle part. Mais peut-être qu'il me manque quelque chose?

Répondre

1

Ce qui suit fonctionnera dans Flask. Flask peut utiliser un code d'état ou une description tout en renvoyant une réponse. La description peut évidemment contenir le code (du côté du client elle est identique). Notez toutefois que cela ne génère pas la description d'erreur par défaut du côté Flask.

from flask import Flask 
app = Flask(__name__) 

@app.route('/knockknock') 
def knockknock(): 
    return "", "500 sleeping, try later" 

est ici la sortie de la commande curl,

curl -i http://127.0.0.1:5000/knockknock 

HTTP/1.0 500 sleeping, try later 
Content-Type: text/html; charset=utf-8 
+0

simple et doux – sba

0

Peut-être que ce document vous sera utile, vous pouvez personnaliser votre propre page d'erreur.

http://flask.pocoo.org/docs/0.12/patterns/errorpages/

par réexaminons le code source, en app.py peut trouver

if status is not None: 
     if isinstance(status, string_types): 
      rv.status = status 
     else: 
      rv.status_code = status 

donc en utilisant

@app.route('/test') 
def tt(): 
    return "status error", "500 msg" 

œuvres.

Désolé pour le malentendu.

+0

Je n'ai vu aucune mention de texte d'état HTTP dans ce document. – sba

0

Je ne suis pas un expert, mais je crains que cela ne sera possible grâce à monkeypatching. Flask renvoie werkzeug Response objets, et il semble que les raisons du code d'état sont hardcoded dans http.py.

Encore une fois, certains monkeypatching pourraient être assez pour changer cela pour votre application cependant.