Zope es una familia de servidores de aplicaciones web libres y de código abierto escritos en Python y su comunidad en línea asociada. Zope significa "Z Object Publishing Environment" y fue el primer sistema que utilizó la metodología de publicación de objetos ahora común para la Web. [2] [3] Zope ha sido llamada la aplicación asesina de Python , una aplicación que ayudó a poner a Python en el centro de atención. [4] [5]
En los últimos años, la comunidad Zope ha generado varios frameworks web adicionales con objetivos y principios dispares, pero que comparten filosofía, personas y código fuente. Zope 2 sigue siendo el más extendido de estos frameworks, en gran parte gracias al sistema de gestión de contenido Plone , que se ejecuta en Zope 2. BlueBream (antes llamado Zope 3) está menos extendido, pero es la base de varios sitios grandes, incluido Launchpad . Grok comenzó como un framework más amigable para los programadores, "Zope 3 para hombres de las cavernas", y en 2009 Pyramid ganó popularidad en la comunidad Zope como un framework minimalista basado en los principios de Zope.
Zope Corporation se formó en 1995 en Fredericksburg, Virginia, bajo el nombre de Digital Creations, como una empresa conjunta con InfiNet (una empresa conjunta de una cadena de periódicos). La empresa desarrolló un motor de anuncios clasificados para Internet. En 1997, la empresa pasó a ser de propiedad independiente y privada. Los ingenieros de software de la empresa están dirigidos por el director de tecnología Jim Fulton. PythonLabs, creadores de Python, pasó a formar parte de la empresa en 2000 (el fundador de Python, Guido van Rossum, dejó Zope Corp en 2003). [6]
Lo que hoy se conoce como Zope 2 comenzó con la fusión de tres productos de software independientes (Bobo, Document Template y BoboPOS) en el servidor de aplicaciones Principia. A instancias de su mayor inversor, Opticality Ventures, Principia se volvió a publicar como software libre bajo el nombre de Zope en 1998. Bobo, y por lo tanto Zope, fue la primera solución de publicación de objetos web . [2] [3]
En noviembre de 2004 se lanzó Zope 3. Zope 3 es una reescritura completa que conserva únicamente la base de datos de objetos ZODB original . Está directamente destinado al desarrollo de aplicaciones web empresariales utilizando los paradigmas de desarrollo más nuevos. Sin embargo, Zope 3 no es compatible con Zope 2, por lo que las aplicaciones de Zope 2 no se ejecutan en Zope 3. Originalmente, se pretendía introducir una capa de compatibilidad con versiones anteriores para que el software de Zope 2 se ejecutara en Zope 3. En su lugar, un módulo conocido como Five introdujo los nuevos paradigmas de Zope 3 en Zope 2, aunque tampoco es posible la compatibilidad total de esa manera.
La existencia de dos frameworks web incompatibles llamados Zope ha provocado mucha confusión. En respuesta, en enero de 2010, Zope 3 fue renombrado como "BlueBream". [7] [8] "Zope" y "blue bream" son los nombres de una especie de pez, el Ballerus ballerus .
La Fundación Zope es una organización que promueve el desarrollo de la plataforma Zope mediante el apoyo a la comunidad que desarrolla y mantiene los componentes de software relevantes. La comunidad incluye tanto a los contribuyentes de software de código abierto, documentación e infraestructura web, como a los consumidores empresariales y organizacionales de la plataforma de software. Administra los sitios web zope.org, una infraestructura para la colaboración de código abierto.
Un sitio web Zope normalmente está compuesto por objetos en una base de datos de objetos Zope , no por archivos en un sistema de archivos , como es habitual en la mayoría de los servidores web . Esto permite a los usuarios aprovechar las ventajas de las tecnologías de objetos, como la encapsulación . Zope asigna direcciones URL a objetos utilizando la jerarquía de contención de dichos objetos; los métodos también se consideran contenidos en sus objetos. Los datos también se pueden almacenar en otras bases de datos o en el sistema de archivos, pero ZODB es la solución más común.
Zope ofrece dos mecanismos para la creación de plantillas HTML : Document Template Markup Language (DTML) y Zope Page Templates (ZPT). DTML es un lenguaje basado en etiquetas que permite la implementación de secuencias de comandos sencillas en las plantillas. DTML tiene disposiciones para la inclusión de variables, condiciones y bucles. Sin embargo, DTML puede ser problemático: las etiquetas DTML intercaladas con HTML forman documentos HTML no válidos, y su uso requiere cuidado al incluir lógica en las plantillas, para conservar la legibilidad del código. Muchos desarrolladores líderes de Zope desaconsejan el uso de DTML. ZPT es una tecnología que aborda las deficiencias de DTML. Las plantillas ZPT pueden ser documentos XML bien formados o documentos HTML, en los que todo el marcado especial se presenta como atributos en el espacio de nombres TAL ( Template Attribute Language ). ZPT ofrece un conjunto muy limitado de herramientas para la inclusión condicional y la repetición de elementos XML. En consecuencia, las plantillas suelen ser bastante simples, con la mayor parte de la lógica implementada en código Python. Una ventaja importante de las plantillas ZPT es que se pueden editar en la mayoría de los editores gráficos HTML. ZPT también ofrece compatibilidad directa con la internacionalización .
Zope 2 es la base del sistema de gestión de contenidos Plone , así como del sistema de planificación de recursos empresariales de código abierto ERP5 .
BlueBream es una reescritura realizada por los desarrolladores de Zope del servidor de aplicaciones web Zope 2. Fue creado bajo el nombre de "Zope 3", pero la existencia de dos frameworks incompatibles con el mismo nombre causó mucha confusión, y Zope 3 fue renombrado "BlueBream" en enero de 2010. [11] [12] BlueBream se distribuye bajo los términos de la Licencia Pública Zope [13] y, por lo tanto, es software libre .
Zope 2 ha demostrado ser un marco útil para el desarrollo de aplicaciones web, pero su uso reveló algunas deficiencias. [ cita requerida ] Por nombrar algunas, la creación de productos Zope 2 implica copiar una gran cantidad de código repetitivo (código "mágico") que simplemente tiene que estar allí, y la interfaz de administración incorporada es difícil de modificar o reemplazar. Zope 3 fue una reescritura del software que intenta abordar estas deficiencias al tiempo que conserva las ventajas de Zope que llevaron a su popularidad. BlueBream se basa en una arquitectura de componentes [14] que facilita la mezcla de componentes de software de varios orígenes escritos en Python . Aunque originalmente se pensó como un reemplazo para Zope 2, la Arquitectura de componentes de Zope se ha retroportado a Zope 2, comenzando con Zope 2.8. Muchas plataformas Zope como Plone están pasando por el mismo tipo de reescritura pieza por pieza. La primera versión de producción del nuevo software, Zope X3 3.0.0, se lanzó el 6 de noviembre de 2004.
El proyecto Zope 3 comenzó en febrero de 2001 como un esfuerzo por desarrollar una nueva versión de Zope como una reescritura casi completa, con el objetivo de conservar las características exitosas de Zope 2 mientras se intentaban corregir algunas de sus deficiencias. El objetivo era crear una plataforma para la programación de aplicaciones web más flexible y amigable para los desarrolladores que Zope 2. El proyecto comenzó con el desarrollo de una arquitectura de componentes , que permite la estructuración del código en pequeñas unidades componibles con interfaces introspectables. Las interfaces están respaldadas por un paquete de interfaz para proporcionar la funcionalidad de interfaces declaradas explícitamente al lenguaje Python . La primera versión de producción del software, Zope X3, se lanzó el 6 de noviembre de 2004. En enero de 2010, Zope 3 pasó a llamarse BlueBream. [11]
El objetivo del proyecto era permitir a los programadores utilizar Zope para exponer objetos Python arbitrarios como objetos modelo en la web sin necesidad de hacer que estos objetos cumplieran requisitos de comportamiento particulares. En Zope 2 había muchos requisitos de comportamiento para permitir que los objetos participaran en el marco, lo que dio como resultado una gran cantidad de clases base y atributos especiales. BlueBream utiliza una arquitectura de modelo/vista, que separa el código de presentación del código del dominio del problema. Las vistas y los modelos están vinculados entre sí por la arquitectura de componentes.
Las bibliotecas subyacentes de BlueBream han ido evolucionando hasta convertirse en una colección de bibliotecas útiles para el desarrollo de aplicaciones web en lugar de un único servidor de aplicaciones monolítico. BlueBream incluye paquetes separados para interfaces, arquitectura de componentes, servidor HTTP, editor, Zope Object Database (ZODB), Zope Page Templates, I18N , política de seguridad, etc. La arquitectura de componentes se utiliza para unirlos. La arquitectura de componentes se configura utilizando un lenguaje de marcado de configuración de ZCML (Zope Configuration Markup Language), un lenguaje de archivo de configuración basado en XML.
El proyecto Zope 3 fue pionero en la práctica de sprints para el desarrollo de software de código abierto . [15] Los sprints son sesiones intensivas de desarrollo en las que los programadores, a menudo de diferentes países, se reúnen en una sala y trabajan juntos durante un par de días o incluso varias semanas. Durante los sprints se utilizan varias prácticas extraídas del desarrollo de software ágil , como la programación en pareja y el desarrollo basado en pruebas . Además del objetivo de desarrollar software, los sprints también son útiles para que los desarrolladores separados geográficamente se reúnan en persona y atraigan nuevas personas al proyecto. También sirven como una forma de que los participantes aprendan unos de otros.
BlueBream se considera un marco estable, utilizado en proyectos de producción en todo el mundo, especialmente Launchpad .
Como resultado del desarrollo de Zope 3/BlueBream, ahora hay muchos paquetes Python independientes que se utilizan y desarrollan como parte de BlueBream y, aunque muchos de ellos se pueden utilizar fuera de BlueBream, muchos otros no. El proyecto Zope Toolkit (ZTK) se inició para aclarar qué paquetes se podían utilizar fuera de BlueBream y para mejorar la reutilización de los paquetes. Por lo tanto, Zope Toolkit es una base para los marcos de trabajo de Zope. Zope 2.12 es la primera versión de un marco de trabajo web que se basa en Zope Toolkit, y Grok y BlueBream tenían previsto lanzar versiones basadas en ZTK durante 2010.
En 2006, un grupo de desarrolladores de Zope 3 inició el proyecto Grok con el objetivo de que la tecnología de Zope 3 fuera más ágil y accesible para los recién llegados. Desde entonces, Grok ha tenido lanzamientos regulares y su tecnología principal (Martian, grokcore.component) también está encontrando aceptación en otros proyectos basados en Zope 3 y Zope 2.
A finales de 2017, comenzó el desarrollo de Zope 4. [16] Zope 4 es el sucesor de Zope 2.13, y realiza muchos cambios que no son compatibles con versiones anteriores de Zope 2.
Zope 5 se lanzó en 2020.
Como se mencionó anteriormente, las plantillas de página de Zope son documentos XHTML , lo que significa que se pueden ver y editar utilizando editores HTML normales o herramientas compatibles con XHTML (una gran ventaja en comparación con otros lenguajes de plantillas utilizados para aplicaciones web). También se puede verificar la compatibilidad de las plantillas con XHTML, por lo que puede estar bastante seguro de que se expandirán automáticamente al formato XHTML adecuado.
Sin embargo, estas plantillas de página no están pensadas para ser presentadas tal como están, sino que están marcadas con elementos y atributos adicionales en espacios de nombres XML especiales (ver a continuación). Esta información adicional se utiliza para describir cómo se debe procesar finalmente la plantilla de página.
A continuación se muestran algunos ejemplos básicos. Para incluir condicionalmente un elemento en particular, como un div
elemento, simplemente agregue el tal:condition
atributo al elemento de la siguiente manera:
< div tal:condición = "..." > ...</div>
Para controlar lo que aparece dentro de un elemento, use el tal:content
atributo de esta manera:
< h1 >< abarca tal: contenido = "..." /></ h1 >...
Por último, para introducir o reemplazar valores de atributos, utilice el tal:attributes
atributo como se indica a continuación. Puede utilizar Python para modificar el href en tiempo de ejecución.
< a href = "" tal:attributes = "href python:'http://someurl.com/%s'%someobject" > ... </ a >
Esta es una explicación muy somera de las plantillas de página de Zope. El comportamiento de las plantillas de página de Zope está descrito casi por completo mediante un lenguaje de plantillas , basado en las especificaciones TAL, TALES y METAL:
Zope también fue pionero en la idea de publicación de objetos, en la que una URL describe el método que se debe llamar en un objeto en particular.
En 1997, Jim Fulton (director de tecnología de Zope Corp) desarrolló una técnica que llamó "publicación de objetos" y la implementó en una biblioteca llamada Python Object Publisher (también conocida como Bobo). La metáfora de publicación de objetos se encuentra en muchos kits de herramientas de Python en la actualidad; en otros lenguajes, solo se encuentra en forma limitada, en el mejor de los casos.
El uso de Zope se ha extendido tan rápidamente que muchos Pythonistas lo han considerado como una aplicación revolucionaria para Python : un sistema tan bueno que naturalmente pone a Python en el centro de atención del desarrollo.
3 tiene licencia Zope Public License, versión 2.1 (ZPL).