combinación ganadora: plone como cms, tu framework preferido como frontend

48
 Combinación ganadora: Plone y tu framework favorito

Upload: menttes

Post on 18-Dec-2014

1.337 views

Category:

Technology


0 download

DESCRIPTION

Plone es un excelente sistema de gestión de contenidos. Recientemente ha sido elegido como el mejor CMS no-PHP en un popular concurso anual. A pesar de esto, muchos desarrolladores web de Python encuentran complejo a Zope, el framework con el que esta desarrollado el CMS. Ahora, ¿qué tal si pudieras usar Plone solo como un gestor de contenidos y tu framework favorito, cualquiera sea, para implementar un front-end de forma transparente, obteniendo una configuración basada sobre una aplicación probada y de bajo mantenimiento, como backend siendo libre para escribir tu propia aplicación, usando el poder y flexibilidad de tu framework web? En esta charla, se mostrarán ejemplos realizados con un par de productos de terceros de Plone y front-ends en varios frameworks.

TRANSCRIPT

Page 1: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Combinación ganadora: Plone y tu framework favorito

Page 2: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Charla basadaen un trabajo

de Carlos de la Guardia

http://us.pycon.org/2009/conference/schedule/event/85/

Page 3: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Ustedes ?

Page 4: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

menttes

Page 5: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Page 6: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Por qué ?

Page 7: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

Plone es el mejor CMSNO desarrollado en PHP

Page 8: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

Plone tiene muchas prestaciones● Fácil de usar e instalar ● Cumple con estandares, incluyendo 

accesibilidad● Mejor registro de seguridad entre los CMSs 

mas populares● Disponible en mas de 40 lenguajes● Motor de workflow y reglas● Versionado: historial y revertir cambios ● y por supuesto...

Page 9: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

Python

Page 10: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

pero...

Page 11: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   Plone es complejo

Page 12: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Plone puede ser lento

Page 13: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Caching no siempre es la respuesta al tráfico

Page 14: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Plone NO es un framework web de propósito general

● Aunque a veces ovidamos eso...● Nuestros clientes no piden funcionalidades:

“queremos Plone, solo necesitamos sacar tal funcionalidad y agregar otras tantas”

● O simplemente creemos que no tenemos otra opción.

● y al final nos queda...

Page 15: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Frankenplone

Page 16: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Y no deberia ser siempre asi. 

Es posible trabajar con tus herramientas favoritas.

Page 17: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   Content MirrorKapil Thangavelu

Page 18: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Content Mirror serializa el contenido de Plone en una bdd 

relacional

● Todos los tipos de contenidos que vienen out of the box en Plone  y los campos archetypes.

● Tipos de contenidos archetypes, agregados en productos de terceros. 

● Mantiene jerarquía de contenido.

● Mirroring completamente automatizado, no requiere configuración mas allá de la instalación.

● Soporte para Plone 2.5, 3.0, 3.1, 3.2 y 3.3.

Page 19: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Simple

Page 20: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Ahora podemos:

● Usar Plone solo para administrar contenido● Usar cualquier framework para trabajar con el 

contenido.● Quitar Plone del deployment● Dejar de pensar como hacer algo en términos 

de plone y comenzar a pensar qué queremos realizar.

● Simplificar, simplificar

Page 21: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

..y podemos servir contenido Plone rápido!

Page 22: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Cómo funciona ?

● Se integra  dentro del manejador de eventos de Plone y subscribe eventos al ciclo de vida de contenido (object added, edited, deleted).

● Transforma schemas de contenido Plone  en tablas relacionales usando SQLAlchemy

● Para todos los objetos se genera un schema, incluyendo archivos y relaciones.

● Se genera una tabla para cada tipo de contenido Plone.

Page 23: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Page 24: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Instalación

● Bajar: http://code.google.com/p/contentmirror/downloads/list

● Instalar● Configurar bdd● Configurar tipos de contenidos propios● Generar tablas● Exportar contenido pre­existente

Page 25: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Configurar la bdd con ZCML<configure xmlns="http://namespaces.zope.org/zope"                  xmlns:db="http://namespaces.objectrealms.net/rdb"                  xmlns:ore="http://namespaces.objectrealms.net/mirror">      <!­­ setup a database connection ­­>   <db:engine url="postgres://localhost/plone"              name="mirror­db"              echo="True"/>

   <!­­ associate the database connection to mirror db structures ­­>   <db:bind engine="mirror­db"           metadata="ore.contentmirror.schema.metadata"           />

</configure>

Page 26: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Configurar los tipos de contenidos propios

Por cada tipo de contenido del sitio:

<ore:mirror content= "Products.ATContentTypes.content.document.ATDocument" />

Page 27: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Generar tablas y subir el contenido

$ dropdb plone$ createdb plone ­­encoding=UTF­8

# generate table definitions and create tables$ bin/instance run parts/productdistros/ContentMirror/ddl.py $ postgres > mirror.sql$ psql plone < /home/andy/plone/zinstance/mirror.sql

# optionally, load existing content$ bin/instance run parts/productdistros/ContentMirror/bulk.py Plone

 

Page 28: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Listo.

Page 29: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Los cambios se envían de forma síncrona a la bdd

plone# select content_id, id, title from content where id = 'front­page'; content_id |     id     |     title­­­­­­­­­­­­+­­­­­­­­­­­­+­­­­­­­­­­­­­­­­          8 | front­page | Content Mirror sent this(1 row)

Page 30: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Qué tipos de sitios ?

● Pocos gestores de contenidos, muchos usuarios 

● Sitios freezados● Sitios con separación clara contenido y 

presentación: – Revistas – Períodicos– Gobierno– ONG

Page 31: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Plyne, por menttes

from pylons import configfrom sqlalchemy import Column, MetaData, Table, typesfrom sqlalchemy.orm import mapperfrom sqlalchemy.orm import scoped_session, sessionmaker

meta = MetaData(engine)model_classes = {}

for tn in engine.table_names():    class_name = str(tn).capitalize()    new_class = type( class_name , object.__bases__, dict (object.__dict__))    new_table = Table( tn, meta, autoload=True)    mapper(new_class, new_table)    

    model_classes[ class_name ] = new_class

Page 32: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Plango, por Andy McKay

from django.db import modelsfrom django.contrib.contenttypes.models import ContentType

from utils import normalize_name

class Content(models.Model):    class Meta:        db_table = u'content'                content_id = models.IntegerField(primary_key=True, editable=False)    id = models.CharField(max_length=256, editable=False)    uid = models.CharField(unique=True, max_length=36, editable=False)    portal_type = models.CharField(max_length=64, editable=False)    status = models.CharField(max_length=64, editable=False, null=False)    type = models.CharField(max_length=64, editable=False)    container = models.ForeignKey('self', related_name="parent", editable=False)

Page 33: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Repoze.BFG, por Carlos de la Guardia

class WebSite(UserDict):    implements(IWebSite,ILocation)    __acl__ = [ (Allow, Everyone, 'view') ]

    def __init__(self, website_id):        UserDict.__init__(self)        self.__name__ = None        self.__parent__ = None        self.website_id = website_id        session = Session()        website =  session.query( PloneContent ).with_polymorphic(             PloneWebSite ).filter( PloneContent.id==website_id ).first()        self.title = website.title

Page 34: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Y mas...

● Turbogears● Werkzeug● PHP● Java 

Page 35: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Content Mirror es fácil de extender● Por ejemplo

– Reportes a partir del contenido– Auditar cambios– Exportar a formatos como JSON– Otros medios de persistencia

● Content mirror Usa la Arquitectura de Componentes de Zope 

● Otra cosa que sea bdd relacional 

Page 36: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Nosotros estudiamos la AC de Zope para que vos no tengas que hacerlo.

Page 37: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Front end para Google App Engine

● Aprovechar la infraestructura de Google● Usar su autenticación● Dejar que ellos solucionen la escalabilidad

● Casi un juguete, pero muestra que se puede hacer con ContentMirror y Plone

Page 38: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

front end para GAE import osimport wsgiref.handlers

from google.appengine.ext import webappfrom google.appengine.ext.webapp import templatefrom google.appengine.ext import dbfrom google.appengine.ext.db import polymodelfrom google.appengine.api import users

class PloneContent(polymodel.PolyModel):    id = db.StringProperty()    uid = db.StringProperty()    portal_type = db.StringProperty()    status = db.StringProperty()    type = db.StringProperty()

Page 39: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Plone content in GAE

Page 40: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Todos los frontends están disponibles en:

http://contentmirror.googlecode.com/ 

Page 41: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Caso de éxito

Biblioteca del Congress en Chile

Page 42: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Crear multiple sitios en una instancia

Page 43: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Seleccionar contenido

Page 44: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Definir layout y estilo

Page 45: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Deploy usando repoze.bfg 

Page 46: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Y que Plone sea parte del universo Python

Page 47: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

http://www.plonesymposium.com.br

Page 48: Combinación ganadora: Plone como CMS, tu framework preferido como frontend

   

Muchas gracias!

Roberto AllendeSobre un trabajo de Carlos de la Guardia

[email protected]

http://twitter.com/robertoallende 

http://robertoallende.com