Devolver una respuesta JSON válida en Flask
Aprenderemos, con esta explicación, sobre la compatibilidad con JSON en Flask y cómo crear una API y devolverla en respuesta JSON con la ayuda de jsonify()
en Flask.
Devolver una respuesta JSON válida con la ayuda de jsonify()
en Flask
Si bien usar JSON con Flask es bastante simple porque el tipo del objeto JSON se puede asignar a los tipos de Python y podemos acceder a él como un diccionario o una matriz. Si está familiarizado con los conceptos básicos de JSON, entonces debería poder entender esto.
Ahora necesitaremos configurar una aplicación Flask. Solo estamos haciendo algunas cosas básicas para crear una aplicación y luego crearemos una ruta única.
Especificaremos una raíz para el método Get_Trucks()
que es route('truck/api/',methods=['GET'])
dentro del decorador. Y dentro del método Get_Trucks()
, declararemos una lista de diccionarios que se llama Trucks
y la devolveremos directamente.
@app.route("truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return Trucks
Ahora, veremos dos casos: el primero devuelve una matriz de objetos y el segundo solo devuelve un objeto por sí mismo o un diccionario.
Sigamos adelante y echemos un vistazo al segundo. El código será el mismo excepto por una función llamada Truck_Details()
.
from flask import Flask
app = Flask(__name__)
@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return Trucks
@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
Details = {"id": 2, "year": 2019, "model": ""}
return Details
if __name__ == "__main__":
app.run(debug=True)
Ahora, ejecutaremos la aplicación Flask e iremos al navegador. Probemos esta primera ruta.
Cuando presionamos Enter, obtenemos el tipo de error donde podemos leer que la función ver
no devolvió una respuesta válida porque estamos tratando de enviar una lista de Python al navegador.
Podemos arreglar esto muy rápidamente importando una cosa más de Flask: ‘jsonify()’. Este es un Flask incorporado; no necesitamos usar un módulo de terceros.
Iremos a donde estamos devolviendo nuestra lista o matriz y la envolveremos en jsonify()
. Guardemos esto y probemos nuestra ruta nuevamente, y ahora estamos obteniendo una respuesta JSON válida.
Si observamos esto en el inspector de red, podemos ver que tiene un tipo de contenido de aplicación JSON.
Veamos cómo devolver un solo objeto desde Flask sin usar jsonify()
. Echémosle un vistazo en el navegador.
Funciona porque estamos usando una versión mejorada. Si usa Flask versión 1.1.0 o superior, convertirá automáticamente el diccionario a JSON cuando lo devuelva en una view
, pero si su versión de Flask es inferior a 1.1.0, puede hacer lo siguiente. Lo mismo que hicimos para devolver varios objetos.
Si observamos el lado derecho, podemos ver que el tipo de contenido es JSON, y solo estamos usando una extensión de Chrome llamada vista JSON para embellecer los datos de respuesta.
Código fuente completo:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return jsonify(Trucks)
@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
Details = {"id": 2, "year": 2019, "model": ""}
return Details
if __name__ == "__main__":
app.run(debug=True)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn