Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Debutant 25 min Flask

Debuter avec Flask

Pourquoi Flask ?

Le développement web en Python est un domaine très actif et évoluant rapidement. Flask, une micro-framework pour Python, a gagné en popularité au fil des années. Elle offre un bon équilibre entre simplicité et fonctionnalités nécessaires, ce qui la rend parfaitement adaptée aux projets de toutes tailles.

Un cas d'usage concret est l'élaboration d'un site web simple pour une petite entreprise. Flask permet de créer cette application en quelques heures, sans avoir besoin de vastes connaissances sur les bases du développement web.

Prerequis

  • Python 3.6 ou ultérieur
  • Un environnement virtuel (venv)
  • Un éditeur de code préféré (VSCode, PyCharm, etc.)

Pour créer un environnement virtuel et installer Flask, suivez ces étapes :

## Créer un environnement virtuel
python3 -m venv venv

## Activer l'environnement virtuel
source venv/bin/activate  # Sous Unix/macOS
venv\Scripts\activate    # Sous Windows

## Installer Flask
pip install Flask

Concepts fondamentaux

Application Flask

Une application Flask est une instance de la classe Flask. Pour créer une application simple, procédez comme suit :

from flask import Flask

app = Flask(__name__)

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

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

Routes

Les routes déterminent les URL qui correspondent à des vues spécifiques de l'application. Dans le code précédent, la route / est associée à la fonction hello_world.

@app.route('/bonjour/<nom>')
def saluer(nom):
    return f'Bonjour, {nom}!'

Templates

Les templates permettent de générer du contenu HTML dynamique. Flask utilise Jinja2 pour les templates.

Créer un fichier templates/hello.html :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bonjour</title>
</head>
<body>
    <h1>Bonjour, nom!</h1>
</body>
</html>

Et modifier la fonction saluer pour utiliser le template :

from flask import render_template

@app.route('/bonjour/<nom>')
def saluer(nom):
    return render_template('hello.html', nom=nom)

Handlers de requêtes

Pour gérer les requêtes POST, utilisez le décorateur @app.route avec la méthode POST.

from flask import request

@app.route('/ajouter', methods=['POST'])
def ajouter():
    item = request.form['item']
    # Ajoutez l'élément à une liste ou enregistrez-le dans la base de données
    return f'L\'élément "{item}" a été ajouté.'

Mise en pratique : projet fil rouge

Créeons un simple gestionnaire de tâches. L'application permettra d'afficher, ajouter et supprimer des tâches.

Étape 1 : Créer l'application Flask

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

app = Flask(__name__)

tasks = []

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

@app.route('/ajouter', methods=['POST'])
def ajouter():
    item = request.form['item']
    if item:
        tasks.append(item)
    return redirect(url_for('index'))

@app.route('/supprimer/<int:index>')
def supprimer(index):
    if index < len(tasks):
        del tasks[index]
    return redirect(url_for('index'))

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

Étape 2 : Créer le template HTML

Créez un fichier templates/index.html :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Gestionnaire de Tâches</title>
</head>
<body>
    <h1>Tâches à Faire</h1>
    <form action="url_for('ajouter')" method="post">
        <input type="text" name="item" placeholder="Ajouter une tâche" required>
        <button type="submit">Ajouter</button>
    </form>
    <ul>
        {% for task in tasks %}
            <li>
                task
                <a href="url_for('supprimer', index=loop.index0)">Supprimer</a>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

Étape 3 : Créer le fichier app.py et exécuter l'application

python app.py

Accédez à http://127.0.0.1:5000/ pour voir votre gestionnaire de tâches en action.

Erreurs frequentes et debugging

Erreur 404 : Page non trouvée

## ❌ Mauvais
@app.route('/tache/<int:index>')
def tache(index):
    return tasks[index]

Correction :

from flask import abort

## ✅ Correct
@app.route('/tache/<int:index>')
def tache(index):
    if index < len(tasks):
        return tasks[index]
    else:
        abort(404)

Erreur 500 : Internal Server Error

## ❌ Mauvais
@app.route('/ajouter', methods=['POST'])
def ajouter():
    item = request.form['item']
    tasks.append(item)
    return redirect(url_for('index'))

Correction :

## ✅ Correct
@app.route('/ajouter', methods=['POST'])
def ajouter():
    try:
        item = request.form['item']
        if item:
            tasks.append(item)
        return redirect(url_for('index'))
    except Exception as e:
        print(e)
        return 'Une erreur est survenue', 500

Erreur de template

<!-- ❌ Mauvais -->
<li>
    task
    <a href="url_for('supprimer', index=loop.index)">Supprimer</a>
</li>

Correction :

<!-- ✅ Correct -->
<li>
    task
    <a href="url_for('supprimer', index=loop.index0)">Supprimer</a>
</li>

Pour aller plus loin

1. Authentification et Sécurité

Ajoutez une authentification basique à votre application pour protéger les routes sensibles.

from flask_login import LoginManager, login_required, logout_user, login_user

login_manager = LoginManager()
login_manager.init_app(app)

class User:
    def __init__(self, id):
        self.id = id

@login_manager.user_loader
def load_user(user_id):
    return User(user_id)

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('index'))

2. ORM avec SQLAlchemy

Utilisez SQLAlchemy pour gérer la base de données.

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tasks.db'
db = SQLAlchemy(app)

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(100), nullable=False)

@app.route('/ajouter', methods=['POST'])
def ajouter():
    item = request.form['item']
    if item:
        new_task = Task(description=item)
        db.session.add(new_task)
        db.session.commit()
    return redirect(url_for('index'))

3. APIs RESTful

Créez une API RESTful pour gérer les tâches.

from flask import jsonify, request

@app.route('/api/tasks', methods=['GET'])
def get_tasks():
    tasks_json = [{'id': task.id, 'description': task.description} for task in Task.query.all()]
    return jsonify(tasks_json)

@app.route('/api/task/<int:id>', methods=['DELETE'])
def delete_task(id):
    task = Task.query.get_or_404(id)
    db.session.delete(task)
    db.session.commit()
    return '', 204

Défi pratique

Créez une application web complète avec Flask qui inclut les fonctionnalités suivantes :

  1. Authentification utilisateurs.
  2. Gestion de notes privées.
  3. API pour ajouter et récupérer des notes.

En suivant ces étapes, vous serez en mesure d'approfondir vos connaissances sur Flask et créer une application web robuste et sécurisée.

Besoin d'aide sur Flask ?

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

Recevoir des conseils

Questions frequentes

Qu'est-ce que Flask ?
Flask est un micro-framework web en Python utilisé pour construire des applications web.
Comment installer Flask ?
Pour installer Flask, utilisez la commande 'pip install flask' dans votre terminal ou command prompt.
Où commencer avec un projet Flask ?
Commencez par créer un nouveau fichier Python et importez Flask. Ensuite, créez une application basique avec une route qui renvoie 'Hello, World!'.

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.