« Ceux qui n'apprennent pas Zope sont condamnés à le réinventer » Philip Eby
Christophe Combelles ● AFPY ● Zope 3 ● Gorfou sarl
Gorfou
But ● Création d'une application web personnalisée ● sur plusieurs mois ou plus
choisir un langage ● Python... – s'apprend en 2 jours – permet de développer rapidement – performant – lisible – permet de tout faire
choisir un framework... ●...de développement rapide ● Pylons, Django, TurboGears ● MVC ● Conventions over configuration ● Projets petits ou moyens
Appli qui grossit ● besoin de découper l'appli ● MVC ? ● découpage en fonctionnalités ● => création de composants
Développer plus vite : ● Réutiliser du code ● = réutiliser des composants
Comment créer des composants ● code documenté ● code testé ● suivre une norme (ex : WSGI) ● Component Architecture – interfaces – composants – registres
Component Architecture ● 2 paquets Python : – zope.interface – zope.component
Interfaces ● Interface – fonctionnalités – schéma – marqueur
Objet class Blog( ): def __init__(self): self.posts = [] def post(self, message): self.posts.append(message)
Interface class IBlog(Interface): posts = Attribute('liste des billets') def post( ): 'créer un nouveau billet' from zope.interface import Interface, Attribute
Objet avec interface class Blog( ): implements(IBlog) class IBlog(Interface): posts = Attribute('posts') def post( ): 'make a new post' from zope.interface import implements
Composants ● Composants – utilities – adapters
Taille du Blog from zope.size.interfaces import ISized
Adapter from zope.component import adapts class BlogSize( ): implements(ISized) adapts(IBlog) def __init__(self, context): self.context = context def sizeForSorting(self): return len(self.context.posts) def sizeForDisplay(self): return unicode(self.sizeForSorting()) + u' posts'
Récupération de l'adapter ● Appel direct – blog_size = BlogSize(blog) ● Component Architecture – blog_size = getAdapter(blog, ISized) ● Écriture simplifiée – blog_size = ISized(blog)
Cas d'utilisation des adapters ● Métadonnées (date de création, créateur, tags) ● Commentaires ● URL d'un objet ● Traversing ● Taille ● Catégorie ● Texte à indexer ● Vignette d'aperçu
Zope 3 aujourd'hui ● WSGI ● Bibliothèques Python ● Méthode de programmation par composants ● Outils web : – DocumentationAPIDOC – Debugdebug wsgi, skin de debug – GestionZMI (Skin Rotterdam) ● Outils en ligne de commande – DebugInstance en ligne de commande – Démarrage rapide zopeproject, grokproject ● Des entreprises et une communauté
Bibliothèques Zope 3 ZODB ZODB, persistent, transaction, BTrees Component Architecture zope.interface zope.component zope.* zope.schema zope.formlib zope.publisher zope.traversing zope.viewlet zope.pagetemplate zope.rdbms zope.sqlachemy etc z3c.* z3c.form z3c.template z3c.pagelet z3c.macro z3c.layer.* etc zc.* zc.catalog zc.relation zc.comment etc..... zope.app.* zope.app.basicskin zope.app.container zope.app.folder zope.app.file zope.app.intid etc hurry.* hurry.query hurry.workflow lovely.* ks.* z3ext.* gp.* gp.svnfolder
Point de vue fonctionnel ● Modèles / schémas ● Templating ● Indexation / recherche ● Base de données objets ● Accès à des bases SQL ● Utilisation d'ORM ● Sécurité / Authentification modulable ● Formulaire webs (génération / validation) ● AJAX (kss, jquery) ● Framework de test ● Framework de dépréciation ● Framework de migration ● Workflow ● i18n, unicode ●...
Zope 3 powered ● Launchpad (Canonical / Ubuntu) ● Schooltool ● CMS – Hivurt – z3ext – (Plone 3) ● Applications – Eztranet – Épidemio SOS Médecins Toulon
Grok
Une démo ? ● Une démo ?
Documentation / ressources ● Livre – Web Component Development with Zope 3 – ZCA (Baiju M) ● Web – Nouveau site zope.org – grok.zope.org ● Communauté francophone – Liste AFPY : zope3-french-user – IRC : #zope3-fr sur freenode
Merci !