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.