Programmer une application web

Le module CherryPy

Avec l'interconnexion des ordinateurs en réseau et en particulier à travers Internet, il devient possible de faire fonctionner des applications sur des machines distantes. L'intérêt d'une application distante peut à première vue sembler inutile dans la mesure où les applications fonctionnent fort bien en local (sur le poste de l'utilisateur). Néanmoins, une application distante peut répondre aux problématiques suivantes:

Pour toutes ces raisons, une interaction entre des programmes distants peut être utile. Comme nous l'avons vu en introduction de ce chapitre, les applications web forment un exemple d'application distante dans la mesure où elles sont installée sur un serveur web et exécutée par le processeur de ce dernier. L'utilisateur interagit à distance avec l'application web par le biais d'un navigateur web qui affiche des pages HTML faisant office d'interface. Le navigateur ne fait que réceptionner, afficher et retourner des informations à l'application web qui s'occupe de traiter les informations. Le fonctionnement de la plupart des applications web repose sur l'utilisation de formulaires HTML qui permettent à l'utilisateur de choisir ou saisir des données à transmettre à l'application web en paramètres. Une fois les données traitées par l'application web, celle-ci construit le code HTML de la page web réceptionnant la réponse à transmettre à l'internaute via le réseau. Les pages web transmises par l'application web à l'internaute sont personnalisées selon les choix ou les saisies de ce dernier. Nous les appelons dès lors pages web dynamiques.

prog1.png

Schéma du fonctionnement d'une application web

L’une des méthodes les plus répandues à l’heure actuelle pour la construction d'applications web consiste à utiliser des pages HTML « enrichies » à l’aide de scripts écrits à l’aide d’un langage spécifique tel que PHP. Ces scripts sont directement insérés dans le code HTML, entre des balises particulières, et ils seront exécutés par le serveur web (Apache, par exemple) à la condition que celui-ci soit doté du module interpréteur adéquat. Il est possible de procéder de cette façon avec Python via une forme légèrement modifiée du langage nommée PSP (Python Server Pages).

prog2.jpg

Exemple de script PHP inséré directement dans le code HTML

Cette approche présente toutefois l’inconvénient de mêler trop intimement le code de présentation de l’information (le HTML) et le code de manipulation de celle-ci (les fragments de script PHP ou PSP insérés entre balises), ce qui compromet gravement la lisibilité de l’ensemble. Une meilleure approche consiste à écrire des scripts distincts, qui génèrent du code HTML « classique » sous la forme de chaînes de caractères, et de doter le serveur web d’un module approprié pour interpréter ces scripts et renvoyer le code HTML en réponse aux requêtes du navigateur (par exemple mod_python, dans le cas de Apache).

Mais avec Python, nous pouvons pousser ce type de démarche encore plus loin, en développant nous-même un véritable serveur web spécialisé, tout à fait autonome, qui contiendra en un seul logiciel la fonctionnalité particulière souhaitée pour notre application. Il est en effet parfaitement possible de réaliser cela à l’aide de Python, car toutes les bibliothèques nécessaires à la gestion du protocole HTTP sont intégrées au langage. Partant de cette base, de nombreux programmeurs indépendants ont d’ailleurs réalisé et mis à la disposition de la communauté toute une série d’outils de développement pour faciliter la mise au point de telles applications web spécifiques.

Le plus célèbre de ces outils est le logiciel Zope, déjà adopté par de grands organismes privés et publics pour le développement d’intranets et d’extranets collaboratifs. Il s’agit en fait d’un système serveur d’applications, très performant, sécurisé, presqu’entièrement écrit en Python, et que l’on peut administrer à distance à l’aide d’une simple interface web. Ce produit, très complet, est parfaitement capable de gérer de très gros sites d’entreprise en offrant d’énormes avantages par rapport à des solutions plus connues telles que PHP ou Java.

D’autres outils moins ambitieux mais tout aussi intéressants sont disponibles. Tout comme Zope, la plupart d’entre eux peuvent être téléchargés librement depuis Internet. Le fait qu’ils soient écrits en Python assure en outre leur portabilité : vous pourrez donc les employer aussi bien sous Windows que sous Linux ou MacOs. Chacun d’eux peut être utilisé en conjonction avec un serveur web «classique» tel que Apache ou Xitami (c’est d’ailleurs préférable si le site à réaliser est destiné à supporter une charge de connexions importante sur l’internet), mais la plupart d’entre eux intègrent leur propre serveur, ce qui leur permet de fonctionner également de manière tout à fait autonome. Cette possibilité se révèle particulièrement intéressante au cours de la mise au point d’un site, car elle facilite la recherche des erreurs.

Une totale autonomie, alliée à une grande facilité de mise en œuvre, font de ces produits de fort bonnes solutions pour la réalisation de sites web d’intranet spécialisés, notamment dans des petites et moyennes entreprises, des administrations, ou dans des écoles. Si vous souhaitez développer une application Python qui soit accessible à distance, par l’intermédiaire d’un simple navigateur web, ces outils sont faits pour vous. Il en existe une grande variété : Django, Turbogears, Spyce, Karrigell, Webware, Cherrypy, Quixote, Twisted, Pylons, etc.

Pour la suite de notre étude, nous avons choisi Cherrypy, car celui-ci nous semble particulièrement bien adapté aux objectifs de ce cours. Il s'agit d'une solution de développement très conviviale pour un programmeur Python, car elle lui permet de développer un site web interactif comme une application Desktop classique, sur la base d'un ensemble d'objets. Ceux-ci génèrent du code HTML en réponse aux requêtes HTTP qu'on leur adresse via leurs méthodes, et ces méthodes sont elles-mêmes perçues comme des adresses URL ordinaires par les navigateurs.

Exercice 1

Installez la dernière version du module CherryPy à l'aide de la commande pip. A ce dessein, il vous suffit d'ouvrir un terminal de votre système d'exploitation et d'y lancer la commande pip install cherrypy.

En lançant import cherrypy dans Idle, aucune message d'erreur ne devrait alors apparaître.

En cas de difficultés dans l'installation du module, il est également possible télécharger l'entier du module cherrypy ici puis de placer le dossier téléchargé dans votre répertoire de travail après l'avoir décompressé.