Les fichiers utiles seront
- page_html.html pour l'exemple 1.1
- shr.py, le module serveur
- La page d'interface vide pour le jeu
- votre fichier fonctions.py pour jouer (ou bien la correction, avec en plus une proposition d'interface texte).
Serveur HTTP Rudimentaire
Le module proposé permet à votre programme python de faire afficher des pages à l'adresse http://127.0.0.1:5080 et de récupérer les requêtes envoyées dans la barre d'adresse à ce serveur.
Servir une page
Pour mettre en œuvre cet exemple, il faut copier/coller le code dans un programme python situé dans un dossier contenant égaelement le module shr.py et la page page_html.html. Ensuite, il faut le lancer puis visiter l'adresse http://127.0.0.1:5080 avec son navigateur.
import shr
def mapage(arg1, arg2):
with open ('page_html.html', 'r', encoding='utf-8') as source:
code_page = source.read()
return code_page
if __name__ == '__main__':
shr.affecter_commande( "/", mapage)
shr.servir()
À chaque fois que l'adresse est appelée, le programme python exécute la fonction «mapage», et la chaine de caractères qu'elle renvoie est transmise au navigateur.
Gérer plusieurs commandes
Dans cet exemple, on associe fon_un à la commande /page1, fon_deux à la commande /page2, et la fonction spéciale shr.stop_tp à /stop. Cette fonction arrête le serveur.
Les adresses auxquelles le serveur répond sont donc ici
- http://127.0.0.1:5080/page1
- http://127.0.0.1:5080/page2
- http://127.0.0.1:5080/stop pour arrêter le serveur
import shr
def fon_un (arg1, arg2):
return "Contenu de la page 1"
def fon_deux (arg1, arg2):
return "Contenu de la page 2"
if __name__ == '__main__':
shr.affecter_commande( "/stop", shr.stop_tp)
shr.affecter_commande( "/page1", fon_un)
shr.affecter_commande( "/page2", fon_deux)
shr.servir()
Le serveur permet d'affecter plusieurs commandes à la même fonction. C'est son premier argument qui permet de savoir quelle adresse a été appelée. Dans cet exemple, la fonction fait systématiquement afficher «Bonjour !» au navigateur, et affiche l'adresse dans la console.
Les adresses à tester sont
- http://127.0.0.1:5080/
- http://127.0.0.1:5080/autre
- http://127.0.0.1:5080/stop pour arrêter le serveur
import shr
def visualisation (arg1, arg2):
print ('Arg1:', arg1)
return "Bonjour !"
if __name__ == '__main__':
shr.affecter_commande( "/stop", shr.stop_tp)
shr.affecter_commande( "/", visualisation)
shr.affecter_commande( "/autre", visualisation)
shr.servir()
Paramètres supplémentaires
On peut de façon standard ajouter des paramètres à une requête web, en ajoutant un point d'interrogation «?» suivi de couples «clé=valeur» séparés par le caractère «&». Si on veut passer en paramètre la valeur «toto» au paramètre «nom» et la valeur «17» au paramètre «age», on ajoute donc «?nom=toto&age=17».
Ces paramètres sont passées dans «arg2» qui est un dictionnaire python. Leur usage sera expliqué au fur et à mesure des besoins.
import shr
def visualisation (arg1, arg2):
print ('Arg2:', arg2)
return "Bonjour !"
if __name__ == '__main__':
shr.affecter_commande( "/stop", shr.stop_tp)
shr.affecter_commande( "/", visualisation)
shr.affecter_commande( "/autre", visualisation)
print ("Tester avec :")
print (" 127.0.0.1:5080/autre?nom=toto&age=17")
print (" 127.0.0.1:5080/autre?pseudo=kiki01500&pays=france")
shr.servir()
print ("Fin du programme")