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 ?


18
return '', 201
Luc

Antworten:


159

Sie können hier darüber lesen .

return render_template('page.html'), 201

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')

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.


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


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


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/


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

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")

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.