""" Serveur Web dynamique minimaliste -- Choisir votre IP -- Choisir la valeur du PORT associé à votre serveur (8000, 8080, 9000 ...) -- Compléter la fonction reponse_a_GET pour qu'il gère de nouvelles requêtes GET si vous le voulez -- Compléter la fonction reponse_a_POST pour qu'il gère de nouvelles requêtes POST si vous le voulez -- Créer les pages HTML correspondantes -- Vérifier que code_serveur.py est bien présent dans votre dossier -- Lancer le script configuration.py Ce code fait référence à une activité se trouvant ici : www.infoforall.fr/act/javascript/gestion-des-formulaires-sur-le-serveur/ """ # 1 - Importation from http.server import HTTPServer from code_serveur import Gestionnaire from datetime import datetime # 2 - Déclarations des constantes IP = '127.0.0.1' PORT = 9000 # 3 - Déclaration des fonctions def reponse_a_GET(requete) : '''Instructions à effectuer si la requête est de type GET. requete contient les infos sur la requête''' print("::: SERVEUR ::: Reception d'une requête GET") # 1 - Récupération optionnelle des sous-informations issues de la requête chaine_requete = requete.requestline adresse_client = requete.obtenir_IP_client port_client = requete.obtenir_PORT_client chemin = requete.obtenir_chemin parametres = requete.obtenir_parametres # 2 - Traitement de la requête if chemin == '/' : fichierHTML = open('www/index.html', 'r', encoding="utf-8") codeHTML = fichierHTML.read() fichierHTML.close() requete.creer_entete(200) requete.repondre(codeHTML) elif chemin == '/liste' : tableauHTML = "" fichierCSV = open('donnees/morceaux.csv', 'r', encoding="utf-8") for enregistrement in fichierCSV : infos = enregistrement.split(';') morceau = infos[0] url = infos[2].replace('/n','') categorie = infos[1] ligne = f"" tableauHTML = tableauHTML + ligne fichierCSV.close() tableauHTML = tableauHTML + "
MorceauCatégorieLien
{morceau}{categorie}{url}
" codeHTML = f'''

Liste des morceaux enregistrés

Retour à l'accueil

{tableauHTML} ''' requete.creer_entete(200) requete.repondre(codeHTML) else : codeHTML = f'''

Rien.

''' requete.creer_entete(200) requete.repondre(codeHTML) def reponse_a_POST(requete) : '''Instructions à effectuer si la requête est de type POST. requete contient les infos sur la requête''' print("::: SERVEUR ::: Reception d'une requête POST") # 1 - Récupération optionnelle des informations issues de la requête chaine_requete = requete.requestline adresse_client = requete.obtenir_IP_client port_client = requete.obtenir_PORT_client chemin = requete.obtenir_chemin parametres = requete.obtenir_parametres # 2 - Traitement de la requête codeHTML = "" if chemin == '/enregistrer' : if 'user' in parametres.keys() and 'pw' in parametres.keys() and parametres['pw'] == "1234franchement?" : enregistrement = f"{parametres['nom']};{parametres['categorie']};{parametres['adresse']}/n" fichierCSV = open('donnees/morceaux.csv', 'a', encoding="utf-8") fichierCSV.write(enregistrement) fichierCSV.close() codeHTML = f'''

Bien reçu

Retour à l'accueil

''' requete.creer_entete(200) requete.repondre(codeHTML) if codeHTML == '' : codeHTML = echec() requete.creer_entete(200) requete.repondre(codeHTML) def echec() : codeHTML = f'''

Votre requete n'a pas pu aboutir.

Retour à l'accueil

''' return codeHTML def afficher(dictionnaire) : print("\nRéception d'une requête. Voici le dictionnaire des paramètres :") print(dictionnaire) for cle, valeur in dictionnaire.items() : print(f"{cle} associée à la valeur {valeur}") def activer_serveur(): '''Création et mise en route du serveur qui surveille ensuite les requêtes qu'on lui communique''' # 1 - Création de l'objet-serveur httpd Gestionnaire.GET = reponse_a_GET # on définit la fonction à exécuter sur un GET Gestionnaire.POST = reponse_a_POST # on définit la fonction à exécuter sur un POST adresse = (IP, PORT) httpd = HTTPServer(adresse, Gestionnaire) # HTTP Daemon, le gestionnaire de requêtes du serveur # 2 - Tentative de mise en route et surveillance des requêtes print(f"::: START ::: Démarrage d'un serveur d'adresse {IP}:{PORT}. CTRL-C pour stopper") httpd.serve_forever() # Démarrage et surveillance en boucle des messages arrivant au serveur print('::: STOP ::: Arrêt du serveur') httpd.server_close() # Arrêt du serveur if __name__ == '__main__': activer_serveur()