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.