Restituisce il codice di stato HTTP 201 nel matraccio


141

Stiamo usando Flask per una delle nostre API e mi chiedevo solo se qualcuno sapesse come restituire una risposta HTTP 201?

Per errori come 404 possiamo chiamare:

from flask import abort
abort(404)

Ma per 201 ottengo

LookupError: nessuna eccezione per 201

Devo creare la mia eccezione come questa nei documenti?


18
return '', 201
— Luc

Risposte:


158

Puoi leggerlo qui.

return render_template('page.html'), 201

11
Ciò richiede page.html... Non funzionerà da solo.
— Chris Stryczynski,

Per me questo tipo di gestione degli errori ha funzionato (dietro IIS) solo se InvalidUsage era figlio di werkzeug.exceptions.HTTPException, non un'eccezione generale
— Gyula Sámuel Karli,

119

È possibile utilizzare Response per restituire qualsiasi codice di stato http.

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')

2
Questa dovrebbe essere la risposta accettata, questo è il modo migliore per farlo.
— LoopsDio

Questa è davvero la soluzione perfetta
— Shahriar Rahman Zahin

fantastico, non pensare mai prima
— Arian Saputra il

26

Come manca suggerisce di inviare il codice di stato nell'istruzione return e se lo stai memorizzando in una variabile come

notfound = 404
invalid = 403
ok = 200

e usando

return xyz, notfound

del tempo assicurati che il suo tipo sia int non str. come ho affrontato questo piccolo problema anche qui è un elenco di codice di stato seguito a livello globale http://www.w3.org/Protocols/HTTP/HTRESP.html

Spero che sia d'aiuto.


17

Tu puoi fare

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

se si desidera restituire i dati JSON nella risposta insieme al codice di errore È possibile leggere le risposte qui e qui per i dettagli dell'API make_response


6

Nel tuo codice pallone, dovresti specificare idealmente anche il tipo MIME il più spesso possibile:

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

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

...eccetera


1

puoi anche usare flask_api per inviare la risposta

from flask_api import status

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

puoi trovare il riferimento qui http://www.flaskapi.org/api-guide/status-codes/


1

A seconda di come viene creata l'API, normalmente con una 201 (creata) si restituisce la risorsa che è stata creata. Ad esempio, se si stesse creando un account utente, si farebbe qualcosa del tipo:

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

Si noti che il numero postfisso è il codice di stato restituito.

In alternativa, potresti voler inviare un messaggio al client come:

return {"msg": "Created Successfully"}, 201

0

Nel mio caso ho dovuto combinare quanto sopra per farlo funzionare

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

0

Quindi, se stai usando il flask_restfulpacchetto per l'API di ritorno 201 diventerebbe simile

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

dove datadovrebbe essere qualsiasi valore hash / JsonSerialiable, come dict, string.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.