Le frontend

  1. Description d'une page
  2. Les arguments de formulaire
  3. Les appels au backend
  4. Récupération des exceptions
Le squelette Woven

Le design est stocké dans des templates woven. La maquette html design.xhtml est stockée dans le répertoire template, ainsi que la page woven de design (design.py). Toutes les pages de l'appliquation doivent donc hériter de la classe Design, qui elle hérite de twisted.web.woven.page.Page

Dans le fichier design.py, il y a aussi des méthodes intermédiaire faisant appel au backend pour effectuer des traitements avant formatage des données.

Description d'une page

class UnePage(Design):
    """Exemple de page
    """       
    isLeaf = True

    def getChild(self, name, request):
        if static.isDangerous(name):
            return static.dangerousPathError
        if name == "nom_de_page" :
            return self
     # classe "répertoire", conteneur
        return Conteneur()

    def wmfactory_title(self,request):
        return "Titre de la page"

    def wmfactory_content(self, request):
        return self.content

    def _dump_html(self,liste):
        """Pour le formatage html des données
        """           

    def renderView(self, request):
        """Récupération du modèle et traitements
        """           
 # tests des request.args
 # appels aux backend
        return view.View.render(self,
        request,doneCallback=self.gatheredControllers)

Les arguments de formulaire

La récupération des arguments de formulaires s'accompagne en cas d'échec d'une levée d'exception FrontendError. Ensuite, les arguments de la requète sont testés (typiquement, un assert pour vérifier que les chaines ne sont pas vides).

try:
    id = request.args['id'][0]
    assert id
except:
    raise FrontendError("identifiant")

Les appels au backend

L'objet xmlrpc du backend est self.zephir. Il est récupéré puis formaté. La récupération des données du backend s'accompagne en cas d'échec d'une levée d'exception de type BackendErrror ou bien DatabaseError.

try:
    resultat = backend(self.zephir.modules.get_module(int(id)))
    module = resultat[0]
    self.content = self._dump_html(module['id'],module['libelle'])
except:
    raise BackendError

Récupération des exceptions

Au final, les exception sont récupérée et les messages d'erreur affichés via la variable self.content.

try:
    # éventuelle levée des exceptions	
except (FrontendError, BackendError), e:
    self.content = e

Les messages d'exception peuvent s'accumuler. Voici un exemple de récupération de l'erreur provenant de la base, tout en générant une erreur backend :

try:
    backend(self.zephir.modules.del_module(int(id)))
    self.content = """
    Le module %s a bien été supprimé
    Liste des modules
    """        % id
except DatabaseError, e:
    raise BackendError("Veuillez vérifier si le module que vous voulez
    supprimer n'est pas en cours d'utilisation." + str(e))
except :
    raise BackendError

Index

mar mar 23 09:10:33 CET 2004 Version: 0.7