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?


18
return '', 201
Luc

Odpowiedzi:


158

Możesz o tym przeczytać tutaj.

return render_template('page.html'), 201

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

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.


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


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



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

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.