| 
                       Contenus  | 
                    
                       Capacités attendues  | 
                    
                       Commentaires  | 
                  
|---|---|---|
| 
                       Formulaire d’une page Web  | 
                    
                       Analyser le fonctionnement d’un formulaire simple. Distinguer les transmissions de paramètres par les requêtes POST ou GET.  | 
                    
                       Discuter les deux types de requêtes selon le type des valeurs à transmettre et/ou leur confidentialité.  | 
                  
<form>Les formulaires sont un moyen de récupérer des données à partir du client pour les passer à l'application serveur.
Dans le fichier html, on utilise la balise <form> en y ajoutant l'attribut method qui permet
            d'indiquer quel est le type de requête HTTP.
<form method="get">
    <label for="nom">Entrez votre nom: </label>
    <input type="text" name="nom" required>
  
    <label for="email">Entrez votre email: </label>
    <input type="email" name="email" required>
  
    <input type="submit" value="Enregistrer">
  
</form>
          HTTP GETCette méthode permet de récupérer des données depuis le serveur. Elle place les paramètres du formulaire dans l'adresse url après validation.
http://chemin/fichier.html?nom=James&email=james%40cameron.com
Créer une page html valide dans laquelle vous placerez un formulaire,
              qui la méthode GET.
Vérifier comment sont placés les paramètres lors de la soumission du formulaire avec le bouton
              submit.
            
Ajouter un paragraphe à votre page qui explique vos observations en ce qui concerne l'encodage des paramètres du formulaire(percent-encoding) et leur placement dans l'adresse avec des exemples.
HTTP POSTCette méthode demande à ce que le serveur accepte les données qui lui sont transmises cette fois-ci dans le corps de la requête http, sans les encoder dans l'url cette fois-ci.
Une requête POST est habituellement envoyée via un formulaire HTML et a pour résultat un changement sur le serveur. Dans ce cas, le type du contenu est sélectionné en mettant la chaîne de caractères adéquate dans l'attribut
enctypede l'élément<form>:
application/x-www-form-urlencoded: les valeurs sont encodées sous forme de couples clé-valeur séparés par '&', avec un '=' entre la clé et la valeur. Les caractères non alphanumériques sont percent encoded.
Sur la page web précédente, ajouter un autre formulaire, qui utilisera cette fois-ci la méthode POST.
Vérifier les différences de fonctionnement entre ces deux formulaires en utilisant la console réseau du navigateur.
Ajouter un paragraphe à votre page qui explique vos observations en ce qui concerne le placement
              des paramètres du formulaire dans le cas de la méthode POST.
En lien avec le programme officiel ci-dessus, ajouter une dernière partie de conclusion pour:
Discuter les deux types de requêtes selon le type des valeurs à transmettre et, ou leur confidentialité.
La plupart des sites utilisent php pour la programmation de
            l'application serveur, mais nous
            allons utiliser python car vous le connaissez et qu'il est installé sur
            vos ordinateurs.
Le dépôt du code est disponible à l'adresse suivante: https://github.com/heoinfo/flask-csv
Grâce au framework flask on lance un serveur qui affiche à sa racine une
            page web qui liste des
            utilisateurs lus à partir d'un fichier csv.
L'ajout d'un utilisateur se fait grâce à un formulaire situé dans la page pages/index.html.
<!-- Formulaire d'ajout d'élève -->
<form action="/" method="post">
<fieldset class="form-group">
    <legend>Ajouter un élève</legend>
    <!-- les attributs name sont récupérés par le serveur
    lors de la soumission du formulaire avec la méthode POST -->
    <input type="text" name="nom" placeholder="Nom" />
    <input type="text" name="prenom" placeholder="Prénom" />
    <input type="text" name="classe" placeholder="Classe" />
    <button type="submit" class="btn btn-info">Enregistrer</button>
</fieldset>
</form>
          On utilise la méthode HTTP POST et on ajoute l'attribut action qui
            indique quel script côté
            serveur va récupérer les valeurs du formulaire, ici la racine du site: /.
          
Du côté serveur le fichier flask-csv.py s'occupe de servir les pages
            html en les générant grâce
            au framework flask.
Le serveur ne sert qu'une page, grâce à la fonction index_page qui est
            exécutée lorsque l'on
            navigue à la racine du site, on lui indique d'accepter les requêtes POST.
flask-csv.py
@app.route('/', methods=['POST'])
def index_page():
    ...
          Si on détecte une soumission de formulaire par la méthode POST, on récupère les données du
            formulaire stockées dans la variable request.form puis on les ajoute à la
            variable globale data
            qui stocke toutes les données.
def index_page():
    # on utilise la variable global data
    global data
    if request.method == 'POST':
        # on récupère les données du formulaire
        post_data = request.form
        # on les ajoute à la variable global data
        data = data.append(post_data, ignore_index=True)
    
          Enfin, on stocke les données dans le fichier csv puis on affiche la page
            index.html avec les
            nouvelles données.
@app.route('/', methods=['POST'])
def index_page():
    ...
    if request.method == 'POST':
        ...
        data.to_csv(CSV_FILE, index=False)
        return render_template("index.html", data=data)