Guide d'utilisation du framework Flask pour Python

Flask est un micro-framework Python conçu pour faciliter le développemant d'applications web. Contrairement à des frameworks plus lourds, Flask reste léger et modulable, ce qui en fait un excellent choix pour les API et les prototypes rapides.

  1. Installation du framework

Pour commencer avec Flask, l'installation se fait via le gestionnaire de paquets de Python :

pip install flask
  1. Création d'une application minimale

Voici la structure de base d'un serveur web avec Flask :

from flask import Flask

# Initialisation de l'application
app_web = Flask(__name__)

@app_web.route('/')
def accueil():
   return 'Serveur Flask opérationnel !'

if __name__ == '__main__':
   app_web.run(host='127.0.0.1', port=5000, debug=True)

Dans cet exemple :

  • L'instance Flask(__name__) sert d'application WSGI.
  • Le décorateur @app_web.route('/') lie l'URL racine à la fonction qui suit.
  • Le mode debug=True permet de recharger automatiquement le serveur lors d'une modification du code.
  1. Gestion du routage et paramètres dynamiques

Flask permet de capturer des segments de l'URL pour les utiliser comme arguments dans vos fonctions.

@app_web.route('/profil/<pseudo>')
def afficher_profil(pseudo):
   return f"Bienvenue sur le profil de {pseudo}"

@app_web.route('/commande/<int:id_commande>')
def details_commande(id_commande):
   return f"Consultation de la commande n°{id_commande}"

Les convertisseurs disponibles incluent int, float et path (pour les chaînes contenant des slashs).

Règles sur les barres obliques (Slashes)

Flask traite différemment les routes selon la présence d'un slash final :

  • /projets/ : Si vous accédez à /projets, Flask redirige automatiquement vers l'URL avec le slash.
  • /apropos : L'accès à /apropos/ provoquera une erreur 404, car l'URL est traitée comme un fichier unique.
  1. Construction d'URLs et Redirections

Pour éviter de coder les URLs en dur, on utilise url_for. Cela facilite la maintenance si les routes changent.

from flask import redirect, url_for

@app_web.route('/admin')
def zone_privee():
   return "Espace Administration"

@app_web.route('/verification/<utilisateur>')
def verifier_acces(utilisateur):
   if utilisateur == 'admin':
       return redirect(url_for('zone_privee'))
   else:
       return f"Accès refusé pour {utilisateur}"
  1. Manipulation des méthodes HTTP

Par défaut, une route n'accepte que les requêtes GET. Pour traiter des formulaires, il faut spécifier la méthode POST.

from flask import request

@app_web.route('/authentification', methods=['GET', 'POST'])
def login():
   if request.method == 'POST':
       user = request.form.get('username')
       return f"Utilisateur {user} connecté."
   return '''
       <form method="post">
           Nom: <input type="text" name="username">
           <input type="submit" value="Valider">
       </form>
   '''
  1. Moteur de templates Jinja2

Flask utilise Jinja2 pour séparer la logique métier de la présentation. Les fichiers HTML doivent être placés dans un dossier nommé templates.

from flask import render_template

@app_web.route('/dashboard')
def console():
   stats = {'utilisateurs': 120, 'visites': 4500}
   options = ['Graphiques', 'Logs', 'Paramètres']
   return render_template('tableau.html', data=stats, menu=options)

Exemple de syntaxe dans le fichier tableau.html :

<h1>Statistiques</h1>
<p>Visites : {{ data.visites }}</p>
<ul>
   {% for item in menu %}
   <li>{{ item }}</li>
   {% endfor %}
</ul>
  1. Fichiers Statiques

Les fichiers CSS, JavaScript et les images sont stockés dans un répertoire nommé static. On les lie dans le HTML via url_for :

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<script src="{{ url_for('static', filename='interactif.js') }}"></script>
  1. L'objet Request

L'objet request permet d'extraire toutes les informations envoyées par le client :

  • request.form : Données issues d'un formulaire POST.
  • request.args : Paramètres de la requête dans l'URL (ex: ?id=10).
  • request.files : Fichiers téléchargés.
  • request.cookies : Lecture des cookies.
@app_web.route('/recherche')
def chercher():
   mot_cle = request.args.get('q', '')
   return f"Résultats pour la recherche : {mot_cle}"

Étiquettes: Flask Python jinja2 WebDevelopment backend

Publié le 9 octobre à 18h26