Zwróć kod stanu HTTP 201 w kolbie

141

Używamy Flaska dla jednego z naszych API i zastanawiałem się, czy ktoś wie, jak zwrócić odpowiedź HTTP 201?

W przypadku błędów takich jak 404 możemy zadzwonić:

from flask import abort
abort(404)

Ale za 201 dostaję

LookupError: brak wyjątku dla 201

Czy muszę utworzyć własny wyjątek, taki jak ten w dokumentach?

ingh.am
źródło
18
return '', 201
Luc

Odpowiedzi:

158

Możesz o tym przeczytać tutaj.

return render_template('page.html'), 201
Brak
źródło
11
To wymaga page.html... To nie zadziała samo.
Chris Stryczynski
Dla mnie ten typ obsługi błędów działał (za IIS) tylko wtedy, gdy InvalidUsage był dzieckiem werkzeug.exceptions.HTTPException, a nie ogólnym wyjątkiem
Gyula Sámuel Karli
118

Możesz użyć Response, aby zwrócić dowolny kod stanu http.

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')
Yasir
źródło
2
To powinna być akceptowana odpowiedź, to jest najlepszy sposób, aby to zrobić.
LoopsGod
To naprawdę idealne rozwiązanie
Shahriar Rahman Zahin
świetnie, nigdy wcześniej nie myśl
Arian Saputra
26

Jak nie sugeruje, wyślij kod statusu w instrukcji return i jeśli przechowujesz go w jakiejś zmiennej, takiej jak

notfound = 404
invalid = 403
ok = 200

i używając

return xyz, notfound

niż czas upewnij się, że jego typ to int nie str. ponieważ miałem do czynienia z tym małym problemem, również tutaj znajduje się lista kodów statusu przestrzeganych na całym świecie http://www.w3.org/Protocols/HTTP/HTRESP.html

Mam nadzieję, że to pomoże.

Harsh Daftary
źródło
17

Możesz to zrobić

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

jeśli chcesz zwrócić dane JSON w odpowiedzi wraz z kodem błędu Możesz przeczytać o odpowiedziach tutaj i tutaj po szczegóły API make_response

Kishan K.
źródło
5

W swoim kodzie kolby najlepiej byłoby określać typ MIME tak często, jak to możliwe:

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

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

...itp

Ben Wheeler
źródło
1

możesz również użyć flask_api do wysłania odpowiedzi

from flask_api import status

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

możesz znaleźć odniesienie tutaj http://www.flaskapi.org/api-guide/status-codes/

Vivek
źródło
1

W zależności od tego, w jaki sposób API jest tworzone, normalnie za pomocą 201 (utworzonego) można zwrócić utworzony zasób. Na przykład, gdyby tworzył konto użytkownika, zrobiłbyś coś takiego:

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

Zwróć uwagę, że numer postfix to zwrócony kod statusu.

Alternatywnie możesz wysłać wiadomość do klienta, taką jak:

return {"msg": "Created Successfully"}, 201
Croc
źródło
0

W moim przypadku musiałem połączyć powyższe, aby zadziałało

return Response(json.dumps({'Error': 'Error in payload'}), 
status=422, 
mimetype="application/json")
Cheetara
źródło
0

Tak więc, jeśli używasz flask_restfulPackage for API, zwracanie 201 będzie podobne

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

gdzie datapowinna być dowolna wartość hashable / JsonSerialiable, np. dict, string.

Deepak Sharma
źródło