Your SlideShare is downloading. ×
0
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,392

Published on

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 …

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.

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
1,392
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
32
Comments
1
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Combinación ganadora:  Plone y tu framework favorito    
  • 2. Charla basada en un trabajo de Carlos de la Guardia http://us.pycon.org/2009/conference/schedule/event/85/    
  • 3. Ustedes ?    
  • 4. menttes    
  • 5.    
  • 6. Por qué ?    
  • 7. Plone es el mejor CMS NO desarrollado en PHP
  • 8. 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...
  • 9. Python
  • 10. pero...    
  • 11.   Plone es complejo  
  • 12. Plone puede ser lento    
  • 13. Caching no siempre es la respuesta al tráfico    
  • 14. 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...    
  • 15. Frankenplone    
  • 16. Y no deberia ser siempre asi.  Es posible trabajar con tus  herramientas favoritas.    
  • 17.   Content Mirror  
  • 18. 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.  
  • 19. Simple    
  • 20. 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    
  • 21.     ..y podemos servir contenido Plone rápido!
  • 22. 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.    
  • 23.    
  • 24. 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    
  • 25. 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>    
  • 26. Configurar los tipos de contenidos  propios Por cada tipo de contenido del sitio: <ore:mirror content=  "Products.ATContentTypes.content.document.ATDocument" />    
  • 27. 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      
  • 28. Listo.    
  • 29. 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)    
  • 30. 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  
  • 31. Plyne, por menttes from pylons import config from sqlalchemy import Column, MetaData, Table, types from sqlalchemy.orm import mapper from 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    
  • 32. Plango, por Andy McKay from django.db import models from 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)    
  • 33. 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    
  • 34. Y mas... ● Turbogears ● Werkzeug ● PHP ● Java     
  • 35. 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   
  • 36. Nosotros estudiamos la AC de Zope  para que vos no tengas que hacerlo.    
  • 37. 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    
  • 38. front end para GAE  import os import wsgiref.handlers from google.appengine.ext import webapp from google.appengine.ext.webapp import template from google.appengine.ext import db from google.appengine.ext.db import polymodel from 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()    
  • 39. Plone content in GAE    
  • 40. Todos los frontends están  disponibles en: http://contentmirror.googlecode.com/     
  • 41. Caso de éxito Biblioteca del Congress en Chile    
  • 42. Crear multiple sitios en una instancia    
  • 43. Seleccionar contenido    
  • 44. Definir layout y estilo    
  • 45. Deploy usando repoze.bfg     
  • 46.     Y que Plone sea parte del universo Python
  • 47.     http://www.plonesymposium.com.br
  • 48. Muchas gracias! Roberto Allende Sobre un trabajo de Carlos de la Guardia rallende@menttes.com http://twitter.com/robertoallende  http://robertoallende.com    

×