text: from flask import *  #module pour développer une application web
  import sqlite3       #module pour interagir avec une base de données sqlite
  
  #création d'une instance de l'application
  app = Flask(__name__)
  
  #clef de session
  app.secret_key = "clef secrète"
  
  @app.route('/')
  def accueil():
      "Controleur de la  route '/'"
      return render_template("accueil2.html")
  
  #dispatcheur de route / URL
  @app.route('/connexion',methods = ['POST'])
  def connexion():
      "Controleur de la route '/connexion' "
      if request.method == 'POST':
          #les valeurs des paramètres sont dans le dictionnaire request.form 
          result = request.form
          #récupération de la valeur du paramètre profil
          profil = result['profil'] 
          #récupération de la valeur du paramètre login
          login = result['login']   
          #récupération de la valeur du paramètre password
          password = result['password']  
          #connexion à la base de données
          conn = sqlite3.connect('monavenir.db')     
          #pour récupérer les lignes sous forme de dictionnaire     
          conn.row_factory =  sqlite3.Row  
          #création d'un curseur pour parcourir la base
          cur = conn.cursor()
          #soumission d'une requête SQL avec paramètres
          cur.execute(f"SELECT * FROM {profil} WHERE login=? and password=? ;",(login, password))
          #récupération d'
          user = cur.fetchone()
          #fermeture du curseur
          cur.close()
          #fermeture de la connexion
          conn.close()
          if user:
              #dictionnaire de session
              session['user'] = dict(user)  #les objets de type ROW retournés ne sont pas sérialisables et stockables dans le dictionnaire du cookie de session  
              session['profil'] = profil    #on stocke le profil dans le cookie de session
              return render_template("{}.html".format(profil), user= user)        
      
  #dispatcheur de route / URL
  @app.route('/deconnexion')
  def deconnexion():
      #on vide le dictionnaire de session
      print(session)     #debug
      session.clear()    #on vide le dictionnaire de session
      print(session)     #debug
      #redirection vers la route controlée par la fonction accueil
      #return render_template('/')
      return redirect(url_for('accueil'))
  
  #dispatcheur de route / URL
  @app.route('/interface')
  def interface():
      "Controleur de la route '/interface' "
      if 'profil' in session and session['profil']:
          return render_template("{}.html".format(session['profil']))
      
  
  
  
  #dispatcheur de route / URL
  @app.route('/rechercheFormation')
  def rechercheFormation():
      "Controleur de la route '/rechercheFormation' "
      conn = sqlite3.connect('monavenir.db')     
      conn.row_factory =  sqlite3.Row  #pour récupérer les lignes sous forme de dictionnaire     
      cur = conn.cursor()
      cur.execute("SELECT DISTINCT type FROM superieur ;")
      list_type = cur.fetchall()
      cur.execute("SELECT DISTINCT commune FROM superieur ;")
      list_commune = cur.fetchall()
      conn.close()
      return render_template("rechercheFormation.html", list_type = list_type,  list_commune = list_commune)
  
  
  #dispatcheur de route / URL
  @app.route('/resultatRecherche', methods = ['POST'])
  def resultatRecherche():
      "Controleur de la route '/resultatFRecherche' "
      if request.method == 'POST':
          result = request.form
          conn = sqlite3.connect('monavenir.db')     
          conn.row_factory =  sqlite3.Row  #pour récupérer les lignes sous forme de dictionnaire     
          cur = conn.cursor()
          if result['type'] == 'indifferent':
              if result['commune'] != 'indifferent':
                  cur.execute('SELECT nom, idSuperieur, type, commune FROM superieur  WHERE commune = ?    ORDER BY type;', (result['commune'],))
              else:
                  cur.execute('SELECT idSuperieur,nom, type, commune FROM superieur ORDER BY commune, type;')                
          elif result['commune'] == 'indifferent':
              cur.execute('SELECT idSuperieur,nom, type, commune FROM superieur WHERE type = ?  ORDER BY commune;',  (result['type'],))
          else:
              cur.execute('SELECT idSuperieur,nom, type, commune FROM superieur WHERE commune = ? and type = ?;', (result['commune'] , result['type']))
          liste_sup = cur.fetchall()
          conn.close()
          return render_template("resultatRecherche.html", liste_sup = liste_sup,  result = result)
  
  
  # on ouvre un serveur en local sur le port 8000
  app.run(debug = True, host='127.0.0.1', port=9000)
  