Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 30 min Flask

Flask avec MongoDB : guide pratique

Pourquoi Flask avec MongoDB : guide pratique ?

Le développement web moderne nécessite une solution flexible et évolutrice pour gérer les données de manière efficace. C'est là que Flask, avec sa simplicité et son extensibilité, se marie parfaitement à MongoDB, un système de base de données NoSQL performant. Un contexte réel où cela peut être utile est le développement d'applications web scalables pour les entreprises qui ont besoin de stocker des millions d'objets de manière réactive et efficace.

Un cas d'utilisation concret serait la création d'une application de gestion des tâches personnelles (todo list) où chaque utilisateur peut créer, lire, mettre à jour et supprimer leurs tâches. Avec Flask et MongoDB, cette application peut facilement s'échaler avec le nombre croissant d'utilisateurs et de tâches en utilisant les capacités scalables de MongoDB.

Prerequis

Avant de commencer ce tutoriel, assurez-vous que vous avez les connaissances suivantes :

  • Python : Vous devriez être familier avec les concepts de base de Python.
  • MongoDB : Comprendre les bases de la structure de données MongoDB et comment utiliser l'interface MongoDB Shell ou une bibliothèque comme pymongo.
  • Flask : Connaissance des routes, des templates, et des variables de session.

Vous aurez besoin des outils suivants installés sur votre système :

  • Python 3.8+
  • MongoDB 4.0+
  • pip (pour installer les bibliothèques Python)

Concepts fondamentaux

Flask

Flask est un framework web en Python qui permet de créer des applications web rapidement et facilement. Il est connu pour sa simplicité et sa flexibilité.

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

MongoDB avec PyMongo

PyMongo est la bibliothèque Python officielle pour MongoDB. Elle permet d'interagir avec MongoDB à partir de Python.

from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['todo_app']
tasks = db['tasks']

## Insertion d'un document
task = {"name": "Faire les courses", "completed": False}
result = tasks.insert_one(task)
print(result.inserted_id)

## Récupération de tous les documents
all_tasks = tasks.find()
for task in all_tasks:
    print(task)

Mise en pratique : projet fil rouge

Nous allons créer un simple application Flask qui utilise MongoDB pour gérer une liste de tâches.

Étape 1 : Initialisation du projet

Créez un nouveau dossier pour votre projet et initialisez un environnement virtuel.

mkdir todo_app
cd todo_app
python -m venv venv
source venv/bin/activate  # Sur Windows utilisez `venv\Scripts\activate`

Installez Flask et PyMongo.

pip install flask pymongo

Étape 2 : Création des fichiers

Créez les fichiers suivants :

  • app.py : Le fichier principal de l'application.
  • templates/index.html : Le template HTML pour la liste des tâches.

app.py

from flask import Flask, request, render_template, redirect, url_for
from pymongo import MongoClient

app = Flask(__name__)
client = MongoClient('mongodb://localhost:27017/')
db = client['todo_app']
tasks = db['tasks']

@app.route('/')
def index():
    all_tasks = list(tasks.find())
    return render_template('index.html', tasks=all_tasks)

@app.route('/add', methods=['POST'])
def add_task():
    task_name = request.form['task_name']
    task = {"name": task_name, "completed": False}
    result = tasks.insert_one(task)
    return redirect(url_for('index'))

@app.route('/toggle/<int:task_id>', methods=['POST'])
def toggle_task(task_id):
    task = tasks.find_one({"_id": task_id})
    if task:
        new_completed = not task['completed']
        tasks.update_one({"_id": task_id}, {"$set": {"completed": new_completed}})
    return redirect(url_for('index'))

@app.route('/delete/<int:task_id>', methods=['POST'])
def delete_task(task_id):
    tasks.delete_one({"_id": task_id})
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Todo List</title>
</head>
<body>
    <h1>Todo List</h1>
    <form action="/add" method="post">
        <input type="text" name="task_name" placeholder="Add new task">
        <button type="submit">Add</button>
    </form>
    <ul>
        {% for task in tasks %}
            <li>
                task.name
                <form action="/toggle/task._id" method="post">
                    <input type="checkbox" name="completed" {% if task.completed %}checked{% endif %}>
                </form>
                <form action="/delete/task._id" method="post" style="display:inline;">
                    <button type="submit">Delete</button>
                </form>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

Étape 3 : Exécution de l'application

Assurez-vous que MongoDB est en cours d'exécution, puis exécutez votre application.

python app.py

Ouvrez un navigateur et allez sur http://127.0.0.1:5000/. Vous devriez voir une liste de tâches vide où vous pouvez ajouter des nouvelles tâches.

Erreurs frequentes et debugging

1. MongoDB ne se connecte pas

Code incorrect :

client = MongoClient('mongodb://localhost:27018/')

Correction :

client = MongoClient('mongodb://localhost:27017/')

2. Erreur de connexion à la base de données MongoDB

Code incorrect :

db = client['non_existent_database']

Correction :

if 'non_existent_database' in client.list_database_names():
    db = client['non_existent_database']
else:
    print("Database does not exist")

3. Erreur d'insertion dans MongoDB

Code incorrect :

task = {"name": "Faire les courses", "completed": False}
result = tasks.insert_one(task)
print(result.inserted_id)

Correction :

try:
    task = {"name": "Faire les courses", "completed": False}
    result = tasks.insert_one(task)
    print(result.inserted_id)
except Exception as e:
    print("Error inserting document:", e)

Pour aller plus loin

  1. Intégration de Flask-Admin : Ajoutez une interface admin pour gérer facilement vos données sans écrire de code.
  2. Utilisation de Blueprints : Organisez votre application en modèles distincts pour un meilleur maintien et scalability.
  3. Ajout d'authentification : Sécurisez votre application avec des fonctionnalités comme Flask-Login.

Défi pratique :

Créez une API simple qui permet de gérer des articles (un blog). L'API devrait avoir les endpoints suivants :

  • GET /articles : Récupère tous les articles
  • POST /articles : Crée un nouvel article
  • PUT /articles/<id> : Met à jour un article existant
  • DELETE /articles/<id> : Supprime un article

Assurez-vous que votre API est sécurisée et répond aux normes RESTful.

Besoin d'aide sur Flask ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment installer Flask-MongoDB dans mon projet Flask ?
Pour installer Flask-MongoDB, utilisez pip avec la commande `pip install flask-mongoengine`. Cela ajoutera les bibliothèques nécessaires à votre environnement virtuel.
Comment est structuré un modèle MongoDB dans Flask ?
Un modèle MongoDB en Flask est une classe qui hérite de `db.Document` (ou d'une extension similaire). Vous définissez les champs du document comme des attributs de la classe avec leurs types correspondants.
Quelle est la différence entre les routes GET et POST dans un application Flask-MongoDB ?
La route GET est utilisée pour récupérer des données du serveur, tandis que la route POST est utilisée pour envoyer des données au serveur afin de créer ou mettre à jour une ressource. Dans le contexte d'un tutoriel sur Flask avec MongoDB, vous utiliseriez GET pour lire les documents et POST pour les insérer ou modifier.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.