Renvoyer une réponse JSON valide dans Flask
Nous apprendrons, avec cette explication, le support JSON dans Flask et comment créer une API et la renvoyer en réponse JSON à l’aide de jsonify()
dans Flask.
Renvoyez une réponse JSON valide à l’aide de jsonify()
dans Flask
Bien que l’utilisation de JSON avec Flask soit assez simple car le type de l’objet JSON peut être mappé sur des types Python, et nous pouvons y accéder comme un dictionnaire ou un tableau. Si vous connaissez les bases de JSON, vous devriez pouvoir comprendre cela.
Nous devrons maintenant configurer une application Flask. Nous faisons juste quelques choses de base pour créer une application, puis nous créerons un seul itinéraire.
Nous allons spécifier une racine pour la méthode Get_Trucks()
qui est route('truck/api/',methods=['GET'])
à l’intérieur du décorateur. Et à l’intérieur de la méthode Get_Trucks()
, nous allons déclarer une liste de dictionnaires qui s’appelle Trucks
et la retourner directement.
@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
Maintenant, nous allons examiner deux cas : le premier renvoie un tableau d’objets, et le second ne renvoie qu’un seul objet ou un dictionnaire.
Allons-y et regardons le second. Le code sera le même à l’exception d’une fonction nommée 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)
Maintenant, nous allons exécuter l’application Flask et accéder au navigateur. Testons ce premier itinéraire.
Lorsque nous appuyons sur Entrée, nous obtenons l’erreur de type où nous pouvons lire que la fonction view
n’a pas renvoyé de réponse valide car nous essayons d’envoyer une liste Python au navigateur.
Nous pouvons résoudre ce problème très rapidement en important une dernière chose de Flask : jsonify()
. Il s’agit d’un flacon intégré ; nous n’avons pas besoin d’utiliser un module tiers.
Nous irons à l’endroit où nous renvoyons notre liste ou tableau et l’envelopperons dans jsonify()
. Sauvegardons cela et testons à nouveau notre itinéraire, et maintenant nous obtenons une réponse JSON valide.
Si nous regardons cela dans l’inspecteur de réseau, nous pouvons voir que le type de contenu de l’application est JSON.
Regardons le retour d’un seul objet du Flask sans utiliser jsonify()
. Jetons un coup d’œil dans le navigateur.
Cela fonctionne parce que nous utilisons une version mise à jour. Si vous utilisez la version 1.1.0 ou supérieure de Flask, il convertira automatiquement le dictionnaire en JSON lorsqu’il le renverra dans une vue
, mais si votre version de Flask est inférieure à 1.1.0, vous pouvez faire le même chose que nous avons fait pour renvoyer plusieurs objets.
Si nous regardons le côté droit, nous pouvons voir que le type de contenu est JSON, et nous utilisons simplement une extension Chrome appelée vue JSON pour embellir les données de réponse.
Code source complet :
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