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?

ingh.am
la source
18
return '', 201
Luc

Réponses:

158

Vous pouvez en savoir plus ici.

return render_template('page.html'), 201
Iacks
la source
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')
Yasir
la source
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.

Daftary dur
la source
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

Kishan K
la source
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

Ben Wheeler
la source
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/

Vivek
la source
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
Croc
la source
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")
Cheetara
la source
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.

Deepak Sharma
la source