Devuelve el código de estado HTTP 201 en el matraz

141

Estamos usando Flask para una de nuestras API y me preguntaba si alguien sabía cómo devolver una respuesta HTTP 201.

Para errores como 404 podemos llamar:

from flask import abort
abort(404)

Pero por 201 me sale

LookupError: no hay excepción para 201

¿Necesito crear mi propia excepción como esta en los documentos?

ingh.am
fuente
18
return '', 201
Luc

Respuestas:

158

Puedes leer sobre esto aquí.

return render_template('page.html'), 201
Falta
fuente
11
Esto requiere page.html... No funcionará por sí solo.
Chris Stryczynski
Para mí, este tipo de manejo de errores funcionó (detrás de IIS) solo si InvalidUsage era hijo de werkzeug.exceptions.HTTPException, no una excepción general
Gyula Sámuel Karli
118

Puede usar Response para devolver cualquier código de estado http.

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')
Yasir
fuente
2
Esta debería ser la respuesta aceptada, esta es la forma de hacerlo.
LoopsDios
Esta es realmente la solución perfecta
Shahriar Rahman Zahin
genial, nunca pienses antes
Arian Saputra
26

Como falta sugiere enviar el código de estado en la declaración de devolución y si lo está almacenando en alguna variable como

notfound = 404
invalid = 403
ok = 200

y usando

return xyz, notfound

que el tiempo asegúrese de que su tipo es int no str. Como me enfrenté a este pequeño problema, también aquí hay una lista de códigos de estado seguidos globalmente http://www.w3.org/Protocols/HTTP/HTRESP.html

Espero eso ayude.

Daftary duro
fuente
17

Tu puedes hacer

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

si desea devolver datos JSON en la respuesta junto con el código de error Puede leer sobre las respuestas aquí y aquí para obtener detalles de la API make_response

Kishan K
fuente
5

En su código de matraz, idealmente debe especificar el tipo MIME con la mayor frecuencia posible, también:

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

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

... etc.

Ben Wheeler
fuente
1

también puedes usar flask_api para enviar respuestas

from flask_api import status

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

Puede encontrar la referencia aquí http://www.flaskapi.org/api-guide/status-codes/

Vivek
fuente
1

Dependiendo de cómo se cree la API, normalmente con un 201 (creado) devolvería el recurso que se creó. Por ejemplo, si estaba creando una cuenta de usuario, haría algo como:

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

Tenga en cuenta que el número pospuesto es el código de estado devuelto.

Alternativamente, es posible que desee enviar un mensaje al cliente como:

return {"msg": "Created Successfully"}, 201
Croc
fuente
0

En mi caso tuve que combinar lo anterior para que funcione

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

Entonces, si está usando flask_restfulPackage for API's return 201 sería como

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

donde datadebería haber cualquier valor hashable / JsonSerialiable, como dict, string.

Deepak Sharma
fuente