Renvoyer une réponse JSON valide dans Flask

Salman Mehmood 15 février 2024
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.

Retour Flask Sortie JSON 1

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.

Retour Flask Sortie JSON 2

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.

Retour Flask Sortie JSON 3

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)
Salman Mehmood avatar Salman Mehmood avatar

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