Programmer une application web

Premier serveur web

Dans votre répertoire de travail, préparez un petit fichier texte que vous nommerez tutoriel.conf, et qui contiendra les lignes suivantes :

[global] 
server.socket_host = "127.0.0.1" 
server.socket_port = 8080 
server.thread_pool = 5 
tools.sessions.on = True 
tools.encode.encoding = "Utf-8" 
[/annexes] 
tools.staticdir.on = True 
tools.staticdir.dir = "annexes" 

Il s’agit d’un simple fichier de configuration que notre serveur web consultera au démarrage. Notez surtout le numéro de port utilisé (8080 dans notre exemple). Comme nous l'avons vu en introduction,vous savez que les logiciels navigateurs s’attendent à trouver les services web sur le numéro de port 80 par défaut. Si vous êtes le propriétaire de votre machine, et que vous n’y avez encore installé aucun autre logiciel serveur web, vous avez donc probablement intérêt à remplacer 8080 par 80 dans ce fichier de configuration : ainsi les navigateurs qui se connecteront à votre serveur ne devront pas spécifier un numéro de port dans l’adresse URL. Cependant, si vous faites ces exercices sur une machine dont vous n’êtes pas l’administrateur, vous n’avez pas le droit d’utiliser les numéros de port inférieurs à 1024 (pour des raisons de sécurité). Dans ce cas, vous devez donc utiliser un numéro de port plus élevé que 80, tel celui que nous vous proposons. Il en va de même si un autre serveur web (Apache, par exemple) est déjà en fonction sur votre machine, car ce logiciel utilise très certainement déjà le port 80, par défaut.

Remarquez également la ligne concernant l’encodage. Il s’agit de l’encodage que Cherrypy devra utiliser dans les pages web produites. Il est possible que certains navigateurs web attendent une autre norme que Utf-8 comme encodage par défaut. Si vous obtenez des caractères accentués incorrects dans votre navigateur lorsque vous expérimenterez les exercices décrits ci-après, refaites vos essais en spécifiant un autre encodage dans cette ligne.

Les 3 dernières lignes du fichier indiquent le chemin d’un répertoire où vous placerez les documents «statiques» dont votre site peut avoir besoin (images, feuilles de style, etc.).

Veuillez à présent encoder le petit script ci-dessous (un clic sur l'image permet de télécharger le script Python):

prog3.jpg

Première application web avec CherryPy

Lancez l’exécution du script. Si tout est en ordre, vous obtenez quelques lignes d’information similaires aux suivantes dans votre terminal. Elles vous confirment que « quelque chose » a démarré, et reste en attente d’événements :


[19/Apr/2020:23:18:14] ENGINE Listening for SIGTERM.
[19/Apr/2020:23:18:14] ENGINE Listening for SIGUSR1.
[19/Apr/2020:23:18:14] ENGINE Listening for SIGHUP.
[19/Apr/2020:23:18:14] ENGINE Bus STARTING

UserWarning: dir is a relative path and no root provided.
section: [/annexes]
root: None
dir: 'annexes'
[19/Apr/2020:23:18:14] ENGINE Started monitor thread 'Autoreloader'.
[19/Apr/2020:23:18:14] ENGINE Started monitor thread '_TimeoutMonitor'.
[19/Apr/2020:23:18:14] ENGINE Serving on http://127.0.0.1:8080
[19/Apr/2020:23:18:14] ENGINE Bus STARTED

Vous venez de mettre en route votre premier serveur web ! Il ne vous reste plus qu’à vérifier qu’il fonctionne bel et bien, à l’aide de votre navigateur préféré. Si vous utilisez ce navigateur sur la même machine que le serveur, dirigez-le vers une adresse telle que : http://localhost:8080, «localhost» étant une expression consacrée pour désigner la machine locale (vous pouvez également spécifier celle-ci à l’aide de l’adresse IP conventionnelle : 127.0.0.1), et «8080» le numéro de port choisi dans le fichier de configuration.

Vous devriez obtenir la page d'accueil suivante:

prog4.png

Première application web avec CherryPy

Vous pouvez tout aussi bien accéder à cette même page d’accueil depuis une autre machine, en fournissant à son navigateur l’adresse IP ou le nom de votre serveur sur le réseau local, en lieu et place de localhost.

Examinons à présent notre script d’un peu plus près. Après importation du module cherrypy, on y définit une nouvelle classe MonSiteWeb(). Les objets produits à l’aide de cette classe seront des gestionnaires de requêtes. Leurs méthodes seront invoquées par un dispositif interne à Cherrypy, qui convertira l’adresse URL demandée par le navigateur, en un appel de méthode avec un nom équivalent (nous illustrerons mieux ce mécanisme avec l’exemple suivant). Si l’URL reçue ne comporte aucun nom de page, comme c’est le cas ici, c’est le nom index qui sera recherché par défaut, suivant une convention bien établie sur le web. C’est pour cette raison que nous avons nommé ainsi notre unique méthode, qui attend donc les requêtes s’adressant à la racine du site.