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.