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