Le serveur d’application Zope

Zope, c’est quoi ?

Zope est un serveur d’application open-source développé par Zope Corporation.

Rarement utilisé comme serveur http, il permet aux équipes de collaborer à la création et à la gestion d’applications Web dynamique, par exemple les intranets ou même les portails.

 

Contrairement à Apache, Zope est un serveur de publication d’objets, et dispose d’une base de données objet (ZODB, Zope Object Database).

Permettant de faire un développement très rapide et orienté objet d’application ou site web, il est écrit en Python.

 

Installation de Zope

Une version 3 de Zope a été distribuée en 2011, cependant nous allons faire ce tutoriel sur la version 2 qui est téléchargeable sur ce site : http://old.zope.org/Products/

Afin d’installer Zope sur votre machine, le mieux sera de prendre la version exécutable 2.10.9

Tout en laissant les options par défaut, lorsque vous arrivez sur cette fenêtre, le programme vous demande le mot de passe que vous souhaitez attribuer à l’utilisateur admin.

Il est utile de choisir un mot de passe dont vous vous rappellerez, afin de ne pas avoir à réinstaller la totalité de Zope si vous oubliez celui-ci.

A la fin du programme d’installation, laissez Zope démarrer.

Après l’installation

Si Zope ne démarre pas malgré que vous ayez coché l’option démarrer après l’installation, vous pouvez le démarrer depuis vos programmes en cliquant sur « Run Zope in Console ».

 

Par défaut, le serveur est routé sur le port 8080.

Vous pouvez désormais y avoir accès en tapant http://localhost:8080/ , ce qui va vous rediriger sur une page de présentation quick start.

Et en tapant http://localhost:8080/manage vous pourrez vous identifier avec le login « admin », et le mot de passe que vous avez choisi dans l’installation tout à l’heure.

 

Voici la page sur laquelle vous allez atterrir :

Si c’est ce que vous obtenez, Zope est correctement installé sur votre machine.

 

Plus d’explications sur Zope

Zope Management Interface

La page que je viens de vous montrer à l’instant, vous amènes sur l’outil d’administration de Zope, dit ZMI (Zope Management Interface). Vous pouvez y voir une arborescence assez simple de vue. Cela dit ce n’est en aucun cas une arborescence de fichier, mais plutôt une arborescence d’objets.

Quelques-uns des éléments à la racine :

  • Le Control Panel, qui va nous servir à gérer les produits installés sur le serveur, et nous donner des informations sur sa configuration et son fonctionnement.
  • Le composant acl_users, qui nous sert à gérer les comptes utilisateurs.
  • Le Brower Id Manager, qui va identifier les visiteurs de manière unique (exemple avec les sessions).
  • L’error_log qui va retracer toutes les erreurs qui sont survenu depuis le dernier redémarrage du serveur.
  • La page index.html, actuellement c’est la page quick start de présentation qui s’y trouve dessus. La page est accessible depuis http://localhost:8080

Ces objets ont tous chacun un type. Ces types correspondent aux éléments de la liste déroulantes en haut à droite qui va servir à ajouter des objets dans l’arborescence. Nous pourrons voir plus tard comment créer de nouveaux types d’objets.

Les objets sont identifiés par leur place dans l’arborescence et par un Id qu’il est obligatoire de mentionner lorsqu’on crée un objet. Les objets peuvent également avoir un titre qui pourra servir à l'identifier de manière plus reconnaissable.

Deux objets du même répertoire de la ZMI peuvent avoir le même Titre mais pas le même ID.

 

Voici les onglets de contrôle dont vous disposez pour chaque instance d’objet :

  • Root Folder nous avons Contents qui liste des objets fils.
  • View qui affiche l’objet si cela est possible.
  • Properties qui permet de gérer les permissions suivant le profil utilisateurs
  • Undo qui permet de faire un retour en arrière sur une action.
  • Ownership qui donne le propriétaire de l’objet
  • Find qui est un outil de recherche d’objets

 

Il est aussi possible de créer des objets avec des onglets personnalisés.

 

Dans la liste des types d’objets, vous disposez du type « Folder » qui va constituer le squelette de notre futur arborescence.

Je précise une fois de plus que c’est un objet Zope (de type Folder) et un non un dossier ou répertoire.

Certains types d’objets sont des conteneurs, ils peuvent donc avoir des objets fils. Les conteneurs sont les seuls à avoir un objet content.

 

La ZODB

La base de données Zope contient toutes les informations persistantes contenues dans la ZMI, c’est-à-dire les objets, les instances, les méthodes, les propriétés et leurs valeurs. La ZODB est dans un fichier nommé Data.fs qui est situé dans le répertoire C:\Zope-instance\var\.

Si vous souhaitez mettre en œuvre un système de backup, il faudra restaurer ce fichier.

Tout est considéré comme objet dans la ZMI, l’objet père est le Root Folder, il contient des objets qui peuvent contenir d’autres objets. Au sens POO on considères ces objets comme des méthodes de l’objet père.

Les types de composants

Dans la ZMI il y a des composants qui servent à la structure du site et de sa partie administration et il y a les composants programmables en font parties. Ces programmables peuvent l’être via la ZMI ou en faisant référence à des programmes externes sur le système de fichier.

Ces différents types de composants programmables sont :

  • Documents DTML
  • Méthodes DTML
  • Scripts Python
  • Zope Page Template (ZPT)
  • Méthodes externes

 

Les documents et méthodes DTML et les ZPT servent à générer des pages web, les scripts Python et méthodes externes sont destinés à assurer des traitements. Cependant, les uns et les autres sont capables de faire les deux : le traitement et la vue.

Dans cette liste seules les méthodes externes ne peuvent être éditées via la ZMI, elles doivent faire référence à des modules Python sur le système de fichiers.

 

Concernant les premiers types, lorsque vous allez cliquer sur l’objet vous allez atterrir sur un onglet edit, c’est un éditeur de texte qui va vous permettre de modifier le composant.

 

La publication des objets

Comme tout serveur web, le client demande l’accès à une ressource via une requête http, comme par exemple http://www.site.fr/test/toto. Dans le cas d’un serveur comme apache « test » est un répertoire du DocumentRoot dans le serveur, « toto est un sous-répertoire de « test » et apache va rediriger vers une page par défaut, index.html par exemple.

Avec Zope, le principe est différent :

Si l’on prend par exemple « test » qui sera un objet fils du Root Folder, et toto une méthode (toujours objet fils) de « test ». C’est l’objet toto qui est publié par Zope et qui peut avoir un fils index_html, qui sera le nom de méthode par défaut de Zope.

Lorsque l’on se rend sur http://localhost:8080, Zope publie la méthode DTML de Root Folder nommée index_html.

Si l’on essaie d’aller sur http://localhost:8080/test/toto nous rencontrons bien sur une erreur.

Pour régler ce souci, rendez-vous sur la liste en haut à droite dans la ZMI .

Et choisissez Folder, afin de créer un objet de ce type dans RootFolder. A cet objet nous donnons l’id « test » et ensuite à l’intérieur de cet objet test, on rajoute un autre Folder nommé « toto »

 

Réessayons l’url précédente :

Gestion des transactions

Zope est un serveur transactionnel et journalisé. Cela veut dire que toutes les opérations élémentaires sont enregistrées de manière à pouvoir faire un back en cas d’erreur ou de problème. Et comme dit plus haut, c’est à cela que sert l’onglet Undo.

Si vous cliquez sur cet onglet, vous verrez la liste de toutes les transactions effectuées dans cet objet mais aussi tous ses enfants. La gestion de transaction est persistante, cela veut dire qu’un redémarrage serveur ne les effacera pas.

 

L’utilité du Undo étant de défaire des transactions, cela dit ce n’est pas toujours possible si la transaction n’est pas la dernière effectuée, par exemple si l’on crée un objet et qu’on le supprime, on ne pourra pas défaire la transaction de création.

Si l’on veut faire une telle action, il faudra défaire toutes les actions postérieures ayant modifié l’objet.

 

 

Documents et méthodes DTML : Mise en pratique

Les documents DTML sont semblable à des objets de données, ils ont des propriétés propres et peuvent réaliser un affichage.

Tandis que les méthodes DTML, n’ont pas de propriétés et sont plutôt des composants de présentation. On peut voir dans le Zope Book que les documents DTML sont assez rarement utilisé, et qu’ils ne sont là que pour assurer la compatibilité avec les anciennes versions de Zope. Le fait de ne pas utiliser les Documents DTML ne change rien d’après ce dernier.

 

Une méthode DTML : page d’accueil simple

Afin de voir un peu plus la mise en pratique de Zope, nous allons prendre comme fil rouge, le site vitrine du nouveau cinéma du coin qui souhaite faire sa promotion.

Commençons par créer un répertoire « cinema » dans le Root Folder, comme montré plus tôt, dans le menu en haut à gauche choisissez Folder, et donnez-lui comme Id « cinema » et comme titre « Cinema ». Décochez les deux autres cases du formulaire.

Dans ce nouveau répertoire on crée un composant error_log de type Site Error Log. Il va enregistrer les exceptions que notre site pourra générer.

N’oubliez pas de bien vous placez dans le répertoire sinon vous risquerez de rencontrer ce problème :

Créons ensuite une méthode DTML, avec comme Id « index_html » (ce sera l’Id par défaut que va chercher Zope pour publier « cinéma »), et en laissant le contenu par défaut.

Voici à quoi devrait ressembler votre ZMI pour l’instant :

En vous rendant sur le lien http://localhost:8080/Cinema voici ce qui s’affiche :

 

Si vous êtes curieux, vous vous demanderez pourquoi le contenu de la page Cinema (bien qu’elle n’ait aucune mise en forme), a fournit ce résultat.

Alors rendez-vous dans la méthode que vous venez d’instanciez. Voilà ce qui s’y trouve :

Explication

Le DTML est un langage à balises tel que le HTML, c’est d’ailleurs pour cela que vous croiserez aussi de l’HTML dans votre code DTML. Il est même possible d’insérer seulement du code HTML dans votre DTML, le navigateur ne dirait rien de particulier, par contre l’inverse n’est pas possible.

Vous pouvez par ailleurs remarquer que les balises DTML unique (non fermantes) ne se terminent pas par « /> ».

Les méthodes appelées

  • Standard_html_header, standar_html_footer : ce sont des méthodes DTML qui se trouvent dans le Root Folder et sont obtenues par acquisition. Elles définissent les en-têtes HTML et l’ouverture de la balise <body> ainsi que la fermeture des balises.
  • Title_or_id, title_and_id : ce sont des méthodes qui s’appliquent au conteneur de l’objet en cours de publication. Elles affichent le titre du conteneur ou son Id s’il n’y a pas de titre et sinon le titre ainsi que l’id entre parenthèses
  • Document_title, document_id : elles s’appliquent à l’objet lui-même et affichent son titre et son id. Dans le cas où nous n’avons pas donner de titre à notre objet, document_title n’affiche rien.

Afin d’avoir un peu de mise en forme dans notre page d’accueil de cinéma, nous allons la personnaliser. Créons dans notre répertoire « cinema », deux méthodes DTML avec les mêmes id, afin d’avoir une charte graphique homogène pour chaque standard_html. Cela va résulter que tous les documents situés en aval de « cinema » hériteront du footer et header.

Standard_html_header

Standard_html_footer

Nous allons du coup créer un objet de type File, d’id « style.css » et vous allez y coller le css de votre choix.

De cette manière, le fait d'appeler, au début et à la fin d'une méthode DTML (ou d'un autre composant), les méthodes standard_html_header et standard_html_footer permet de fixer, de manière simple et sans redondance de code, le titre de la fenêtre, du style CSS, un pied de page, et bien d’autres choses encore. Vous pouvez évidemment étendre cette pratique en créant d'autres méthodes, appelées dans le corps de la page, pour mettre en forme tel ou tel composant, ou afficher un logo.

Actuellement avec l’ajout de mon CSS personnel, la page d’accueil ressemble à ceci :

Nous allons rajouter une image en dessous du titre. Dans le répertoire « Cinema », créons un objet de type Image avec l’Id « image_site ». Et cliquez ensuite sur le bouton Choisir un fichier dans le champ File. Il sera uploadé et intégré dans la ZODB.

Voici un exemple du formulaire d’ajout d’image :

Et le résultat que cela va donner après avoir ajouté dans le standard_html_header la balise « <dtml-var image_site > » :

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *