Renvoie le code d'état HTTP 201 dans le flacon


141

Nous utilisons Flask pour l'une de nos API et je me demandais simplement si quelqu'un savait comment renvoyer une réponse HTTP 201?

Pour les erreurs telles que 404, nous pouvons appeler:

from flask import abort
abort(404)

Mais pour 201 je reçois

LookupError: pas d'exception pour 201

Dois-je créer ma propre exception comme celle-ci dans la documentation?


18
return '', 201
Luc

Réponses:


158

Vous pouvez en savoir plus ici.

return render_template('page.html'), 201

11
Cela nécessite page.html... Cela ne fonctionnera pas tout seul.
Chris Stryczynski

Pour moi, ce type de gestion des erreurs fonctionnait (derrière IIS) uniquement si InvalidUsage était un enfant de werkzeug.exceptions.HTTPException, pas une exception générale
Gyula Sámuel Karli

119

Vous pouvez utiliser Response pour renvoyer n'importe quel code d'état http.

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')

2
Cela devrait être la réponse acceptée, c'est la meilleure façon de le faire.
LoopsGod

C'est vraiment la solution parfaite
Shahriar Rahman Zahin

super, ne pensez jamais avant
Arian Saputra

26

Comme il manque le code d'état d'envoi suggéré dans l'instruction de retour et si vous le stockez dans une variable comme

notfound = 404
invalid = 403
ok = 200

et en utilisant

return xyz, notfound

que le temps, assurez-vous que son type est int et non str. comme j'ai fait face à ce petit problème, voici également la liste des codes d'état suivis globalement http://www.w3.org/Protocols/HTTP/HTRESP.html

J'espère que ça aide.


17

Tu peux faire

result = {'a': 'b'}
return jsonify(result), 201

si vous souhaitez renvoyer une donnée JSON dans la réponse avec le code d'erreur Vous pouvez lire les réponses ici et ici pour plus de détails sur l'API make_response


6

Dans votre code flask, vous devez idéalement spécifier le type MIME aussi souvent que possible:

return html_page_str, 200, {'ContentType':'text/html'}

return json.dumps({'success':True}), 200, {'ContentType':'application/json'}

...etc


1

vous pouvez également utiliser flask_api pour envoyer une réponse

from flask_api import status

@app.route('/your-api/')
def empty_view(self):
    content = {'your content here'}
    return content, status.HTTP_201_CREATED

vous pouvez trouver la référence ici http://www.flaskapi.org/api-guide/status-codes/


1

En fonction de la façon dont l'API est créée, normalement avec un 201 (créé), vous renverrez la ressource qui a été créée. Par exemple, s'il créait un compte utilisateur, vous feriez quelque chose comme:

return {"data": {"username": "test","id":"fdsf345"}}, 201

Notez que le numéro postfixé est le code d'état renvoyé.

Vous pouvez également envoyer un message au client tel que:

return {"msg": "Created Successfully"}, 201

0

Dans mon cas, j'ai dû combiner ce qui précède pour que cela fonctionne

return Response(json.dumps({'Error': 'Error in payload'}), 
status=422, 
mimetype="application/json")

0

Donc, si vous utilisez flask_restfulPackage pour l'API, le retour 201 deviendrait comme

def bla(*args, **kwargs):
    ...
    return data, 201

datadevrait être n'importe quelle valeur hachable / JsonSerialiable, comme dict, string.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.