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?


18
return '', 201
Luc

Respuestas:


158

Puedes leer sobre esto aquí.

return render_template('page.html'), 201

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

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.


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


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.


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/


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

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.