Geben Sie den HTTP-Statuscode 201 in den Kolben zurück

141

Wir verwenden Flask für eine unserer APIs und ich habe mich nur gefragt, ob jemand weiß, wie man eine HTTP-Antwort 201 zurückgibt.

Für Fehler wie 404 können wir anrufen:

from flask import abort
abort(404)

Aber für 201 bekomme ich

LookupError: Keine Ausnahme für 201

Muss ich meine eigene Ausnahme wie diese in den Dokumenten erstellen ?

ingh.am
quelle
18
return '', 201
Luc

Antworten:

159

Sie können hier darüber lesen .

return render_template('page.html'), 201
Iacks
quelle
11
Dies erfordert page.html... Es wird nicht von selbst funktionieren.
Chris Stryczynski
Für mich funktionierte diese Art der Fehlerbehandlung (hinter IIS) nur, wenn InvalidUsage ein Kind von werkzeug.exceptions.HTTPException war, keine allgemeine Ausnahme
Gyula Sámuel Karli
116

Sie können Response verwenden, um einen beliebigen http-Statuscode zurückzugeben.

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')
Yasir
quelle
2
Dies sollte die akzeptierte Antwort sein, dies ist der richtige Weg, dies zu tun.
LoopsGod
Dies ist wirklich die perfekte Lösung
Shahriar Rahman Zahin
großartig, denke nie zuvor
Arian Saputra
26

Da fehlt vorgeschlagen, senden Sie den Statuscode in der return-Anweisung und wenn Sie ihn in einer Variablen wie speichern

notfound = 404
invalid = 403
ok = 200

und mit

return xyz, notfound

als Zeit stellen Sie sicher, dass sein Typ int nicht str ist. Da ich mit diesem kleinen Problem konfrontiert war, finden Sie auch hier eine Liste der Statuscodes, die weltweit befolgt werden: http://www.w3.org/Protocols/HTTP/HTRESP.html

Ich hoffe es hilft.

Harter Daftary
quelle
17

Du kannst tun

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

Wenn Sie JSON-Daten in der Antwort zusammen mit dem Fehlercode zurückgeben möchten, finden Sie hier und hier Informationen zu den Antworten für die API-API make_response

Kishan K.
quelle
5

Idealerweise sollten Sie in Ihrem Kolbencode auch den MIME-Typ so oft wie möglich angeben:

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

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

...etc

Ben Wheeler
quelle
1

Sie können auch flask_api zum Senden einer Antwort verwenden

from flask_api import status

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

Eine Referenz finden Sie hier http://www.flaskapi.org/api-guide/status-codes/

Vivek
quelle
1

Abhängig davon, wie die API erstellt wird, geben Sie normalerweise mit einem 201 (erstellt) die erstellte Ressource zurück. Wenn Sie beispielsweise ein Benutzerkonto erstellen, gehen Sie wie folgt vor:

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

Beachten Sie, dass die postfixierte Nummer der zurückgegebene Statuscode ist.

Alternativ möchten Sie möglicherweise eine Nachricht an den Client senden, z.

return {"msg": "Created Successfully"}, 201
Croc
quelle
0

In meinem Fall musste ich das oben Genannte kombinieren, damit es funktioniert

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

Wenn Sie also flask_restfulPackage for API verwenden, wird 201 zurückgegeben

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

Wo datasollte ein Hashable / JsonSerialiable-Wert sein, wie dict, string.

Deepak Sharma
quelle