Los objetos y productos Zope
Introducción
Estamos aquí de vuelta con la tercera entrega del curso de Zope.
Tras un primera entrega en la que se presentó Zope y una
segunda en la que se demostró a nivel práctico como hacer nuestro
primer web con Zope, vamos a adentrarnos más en los dominios de
Zope y, más en concreto, con los objetos y productos de apoyo
a Zope. Productos que en su mayor parte han sido desarrollados
por la comunidad Zope, normalmente bajo la licencia ZPL, y que
logran hacer de Zope una plataforma mucho más potente y versátil.
Entre los productos que nos encontramos en Zope podemos destacar
el que sirve para enviar correo electrónico de una forma sencilla
desde Zope, el que crea un Wiki Web, un lugar donde poder discutir
ideas entre un grupo de personas o el famoso Squishdot, que sirve
para poder montar nuestro propio weblog al más puro estilo
Slashdot o Barrapunto en unos minutos.
A lo largo de este artículo aprenderás cómo meter objetos dentro
de tu web, algo que ya hemos visto, como insertar nuevos objetos dentro
del entorno Zope y las laboreas de administración entorno al control
de productos y objetos de Zope.
Los Productos Zope
Antes de comenzar con los detalles de que es un producto Zope,
dónde encontrarlos y para que sirven, vamos a ver de que
Productos Zope disponemos en nuestra instalación estándar.
En este caso me voy a referir a la configuración que viene
con Debian Potato, aunque es de esperar que sea idéntica a
la que un usuario cualquier de Zope se puede encontrar en la
versión 2.1.6. La versión que tiene de Zope la puede
consultar el usuario en la pantalla de gestión de Zope dentro
de la carpeta "Control Panel".
Dentro de esta versión de Zope los objetos que aparecen instalados
por defectos los podemos observar en la siguiente imagen:
De entre toda esta lista de objetos hay un grupo de ellos que ya hemos
utilizado como son DTML Document o Folder, entre otros. Vamos a ir
describiendo para que sirve cada uno de ellos, aunque no sin recordar
antes que en Zope todo son objetos: las carpetas, los ficheros, las
imágenes ... todo. Lo que ocurre es que en la interfaz de Zope
les han dado un significado familiar para que nos sea más sencillo
su uso. Pero es importante recordar este concepto, y que todos estos
objetos residen en la base de datos orientada a objetos de Zope. Lo
que se nos muestra en esta lista son las clases de objetos que tenemos
disponibles, que luego aumentaremos, y nosotros elegimos una clase
de objeto y creamos una instancia, si hablamos con la terminología
de la programación orientada a objetos. Puntualizado este concepto
vamos con esa descripción de los objetos Zope que aparecen.
-
DTML Document: este objeto sirve para añadir nuevos
documentos HTML a nuestro sitio. Dentro de esas páginas HTML se
puede incluir código DTML, tal y como hicimos a la hora
de construir las páginas de la empresa Rayo de Luz.
-
DTML Method: este objeto es muy similar a DTML
Document, pero está más orientado a la creación de métodos
que interactúen con Zope en función de las acciones y los datos
que proporcione el cliente que accede al sitio.
-
External Method: nos permite definir funciones en
Python y crear objetos asociadas a ellas. Esos objetos pueden
ser utilizados luego desde Zope para invocar a dichas funciones.
-
File: permite crear objetos a partir de ficheros
disponibles fuera de Zope. No olvidemos que todos los objetos
Zope viven dentro de la base de datos de objetos de Zope, es decir,
Zope no puede acceder a ficheros locales de disco. Gracias a
este objeto podemos importar dentro de la base de datos
de Zope ficheros. Una vez dentro de Zope ya podremos acceder
a ellos desde otros objetos Zope.
-
Folder: la forma de organizar los objetos Zope
dentro del sitio se realiza también utilizando la abstracción
de carpetas en la que se clasifican los objetos. Los objetos
Folder (carpeta) nos permiten guardar dentro de ellos a otros
objetos, para organizar la estructura de objetos como si fueran
ficheros y directorios. Asociados a los objetos Folder
tenemos una carpeta de usuarios, para controlar el acceso a
esas carpetas, y el la posibilidad de crear de forma
automática un objeto "index_html", de tipo DTML Document,
que se mostrará cuando alguien intente acceder al objeto
Folder. Recordemos que en el número anterior de la serie
de Zope ya creamos ficheros de usuarios que controlaban el
acceso a determinados directorios.
-
Image: este objeto nos permite importar a Zope
imágenes. Una vez dentro de Zope, ya pueden ser utilizadas
dentro de los documentos siguiendo el método tradicional
de HTML.
-
Mail Host: con este objeto creamos una puerta de acceso
desde Zope a un servidor de correo a través del cual podemos
enviar correo. Una vez configurado de forma correcta el Mail Host,
se podrá utilizar la interfaz de Zope para envío de correo.
-
User Folder: este objeto es la base para el control
de acceso a los recursos de Zope, es decir, controlar el acceso
y las funciones que se pueden llevar a cabo dentro de Zope. Como
ya hemos comentado, Zope destaca por su potente arquitectura
de control de recursos y usuarios. Vimos en el número anterior
como podemos crear para una carpeta un User Folder que sea
el que controle quien puede acceder y que puede hacer
en esa carpeta, y en todas las carpetas que cuelguen de esta.
-
Version: este objeto pone al descubierto otra de
las potencias de Zope: el control de versiones que lleva. Todos
los objetos dentro de Zope tienen controlado las modificaciones
que se hacen sobre ello. De este modo, podemos saber que se
cambio y cuando, y poder deshacer los cambios que se llevaron
a cabo. La potencia del "Undo" de Zope es realmente impresionante
permitiendo deshacer casi cualquier operación que se haya
producido sobre el sistema. Con este objeto, podemos crear una
nueva versión del sitio, activarla y comenzar a trabajar
sobre ella. Esta versión y todo su contenido son privados
y no se harán públicos hasta que no decidamos que todo
está acabado y probado. De esta forma los desarrolladores pueden
trabajar tranquilamente con la propia versión en producción,
las personas autorizadas pueden ir viendo como avanza el desarrollo
y su publicación será tan sencilla como decirle al objeto
Version que se ha terminado el desarrollo y las pruebas de esa
Version y que pase a público todo el trabajo.
Realmente potente, ¿verdad? Hablaremos más sobre ello.
-
Z Gadfly Database Connection: para poder
acceder desde Zope a las bases de datos externas, se crean
lo que se llamada adaptadores de Zope. Estos adaptadores
exportan hacia Zope una interfaz común a los objetos,
es decir, que proporcionan una forma de acceder común
a cualquier base de datos para Zope. Esto permite que una
aplicación que trabaja sobre MySQL pueda pasar a trabajar
sobre Postgres con un simple cambio a la hora de elegir
el adaptador. Este objeto, Z Gadfly Database Connection,
es el que nos permite crear una conexión a la
base de datos Gadfly. Esta base de datos se distribuye
con licencia similar a la BSD. Este adaptador se
incluye por defecto con Zope para que se pueda practicar
la forma de acceder a las bases de datos desde Zope,
unos de los puntos más fuertes de Zope. Para acceder
a una base de datos desde Zope, se activa la conexión a
la base de datos a través de un manejador adecuado,
en este caso Z Gadfly Database, y se pasan a ejecutar
los llamados ZSQL Methods, que pasamos a detallar
a continuación.
-
Z SQL Method: estos objetos nos permiten crear
peticiones SQL contra las bases de datos que tengan adaptadores
en Zope. Existen adaptadores para las principales bases de
datos (MySQL, Postgres, Oracle ...) y los Z SQL Methods son
independientes de la base de datos, tan sólo necesitan
una conexión por el que poder ejecutarse. A la hora
de crearse la petición SQL, se selecciona a través de
que conexión se quiere llevar a cabo la petición.
Sobre las bases de datos hablaremos en profundidad en
futuras entregas de este curso Zope.
-
Z Search Interfaces: con este objeto crearemos
interfaces de búsqueda en bases de datos de una forma muy
sencilla. Lo usual es seleccionar un Z SQL Method a partir
del cual se crea un formulario HTML y se prepara una hoja
de resultado. Este objeto nos permite ahorrar mucho tiempo
de desarrollo y facilita en gran medida el diseño de
interfaces de búsqueda en bases de datos.
-
Z Catalog: en Zope todo son objetos que
se almacenan en una base de datos. Esto es fundamental a la hora de
permitir hacer búsquedas complejas y muy potentes de recursos
dentro de un web Zope. Al tener registrados todos los objetos en
la base de datos, se simplifica mucho el realizar interfaces de
búsquedas y se abren puertas impensables en entornos
tradicionales de publicación web, donde las páginas
HTML son ficheros almacenados en disco. Con los objetos
Z Catalog podemos catalogar, similar a obtener índices
a la documentación que consideremos importante.
Los catálogos en combinación con Z Search Interfaces
nos proporcionan un mecanismo muy potente para hacer búsquedas
dentro de todo el contenido de nuestro sitio web, como vamos a poder
ver en lo que resta de este artículo.
Catalogar y Buscar en un sitio Zope
Después de analizar todos los objetos Zope que tenemos por
defecto dentro de una instalación estándar de Zope nada mejor
que mostrar un uso práctico de dos de ellos para terminar
de familiarizarnos con su uso.
El objetivo es crear una interfaz de búsqueda dentro de
todo el sitio Rayo de Luz, que creamos en la anterior entrega
del curso. Era un sitio muy sencillo con un grupo de carpetas que
contenían la información de cada departamento. Esta información
es previsible que vaya creciendo con el tiempo y necesitamos poder
acceder a ella de una forma sencilla y flexible. Y como vas a ver,
esto en Zope es realmente sencillo y potente.
Catalogar la información
Durante el trascurso de la anterior entrega del curso creamos el
sitio de la empresa "Rayo de Luz". Era un sitio muy sencillo con
una página principal desde la que se podía acceder a
los distintos departamentos de la compañía. El resultado
que obtuvimos se puede observar en la siguiente figura.
Nuestro objetivo en esta ocasión es añadir un nuevo enlace
a esta página a una interfaz de búsqueda dentro de todo
el sitio. Como ya hemos comentado, los sistemas de información de
las compañías, si han sido bien implantados, tienen una gran
tendencia de crecimiento y los sistemas de búsqueda se vuelven
fundamentales para poder localizar con facilidad información.
Dentro de Zope, todos los sitios no son más que un conjunto de
objetos en una base de datos, por lo que las búsquedas se
resumen en poder acceder a la base de datos Zope por distintos
campos y hacer búsquedas utilizándolos. El lector familiarizado
con las bases de datos entenderá que el que todo este en
base de datos simplifica mucho el proceso de búsqueda, además
de permitir hacer búsquedas bastante complejas.
Para poder buscar dentro del contenido de Rayo de Luz lo primero es
crear un catálogo con todos los objetos sobre los que queremos buscar.
Para ello, y desde la interfaz de gestión, nos vamos a la carpeta
rayodeluz y añadimos un nuevo objeto ZCatalog.
Para crear un objeto de tipo catálogo tan sólo hay que proporcionar
dos datos. Cual es el identificador del catálogo, que es la
palabra que usarán otros objetos Zope para poder acceder a é,
y cual es el título del catálogo.
Bien, una vez que tenemos creado el catálogo hay que ir a configurarlo
y crearlo. El objeto Catálogo es realmente potente y nos permite
configurarlo para poder especializarlo en determinadas tareas. La
interfaz principal de dicho objeto la podemos observar en la
siguiente figura.
Lo primero es añadir objetos al catálogo. Inicialmente los
catálogos se crean vacíos y hay que ir a la solapa "Find
Items to ZCatalog" (Encontrar Objetos para ZCatalog) para crear
un catálogo inicial sobre el que se realizarán las búsquedas.
Dentro de dicha solapa se especifican los criterios a seguir
para encontrar los objetos a catalogar, es decir, los objetos para
los que se obtendrán una serie de índices que formarán
el catálogo y que nos permitirán hacer búsquedas rápidas
sobre ellos.

Las opciones de las que disponemos son múltiples. Podemos catalogar
sólo un tipo de objetos, utilizando los identificadores de los
objetos, su contenido, su fecha de modificación y los permisos
que tienen los objetos. En nuestro caso, vamos a irnos al caso más sencillo
y vamos a pedirle que nos catalogue todos los objetos, algo que se
debe evaluar en sitios con mucha información, pero que para nuestro caso
es perfectamente válido ya que aún hay poca información
y además, sabemos que Zope escala muy bien por lo que podemos
estar tranquilos de cara al futuro. Sin modificar pues ninguna
opción pulsamos el botón de "Find" (Buscar) con lo que el objeto
ZCatalog pasa a buscar en toda la base de datos Zope todos los objetos
que estén dentro de la carpeta "rayodeluz", los indexa y crea
el catálogo. El resultado lo podemos ver en la siguiente figura.

Ha encontrado un total de 13 objetos con los que ha creado 13 registros
dentro del catálogo. ¿Qué índices ha creado para buscar?
El objeto Catalog dispone de la posibilidad de definición de
los índices que se generarán bajo la solapa "Indexes" de
la interfaz de gestión del objeto Catálogo, pero no vamos a entrar
en esos detalles ya que nos alejarían demasiada de este ejemplo
básico de uso de catálogos y búsquedas en Zope.
Bueno, ahora ya tenemos el catálogo creado pero poco podemos
hacer con él. Necesitamos crear una interfaz que nos permita
hacer búsquedas sobre el catálogo, de cara a que nuestros
usuarios puedan fácilmente localizar la información que
necesitan. Ha llegado el momento de echar mano de Z Search Interface,
el objeto con el que crear interfaces de búsqueda es coser y cantar.
Búsquedas en el catálogo
Utilizamos el procedimiento habitual para añadir un nuevo objeto
Z Search Interface a la carpeta "rayodeluz" tras lo que se nos piden
una serie de datos para poder crear la interfaz de búsquedas.

Este objeto crea dos partes. Una es la interfaz de búsqueda y la otra
es la página con el informe de resultados. El primer dato a
proporcionar es sobre que objeto queremos hacer las búsquedas.
Este objeto deberá ser un objeto Zope que exporte una interfaz
que permita realizar búsquedas sobre él. Por ejemplo los Z SQL
Method sirven. Desde la interfaz de búsquedas pasamos una serie
de parámetros que luego se utilizan en el Z SQL Method para construir
la petición SQL y consultar la base de datos. Otro tipo de objetos
que se pueden utilizar con la interfaz de búsquedas de Zope son
los catálogos, que es precisamente el caso que nos ocupa.
Por ello seleccionamos entre los objetos disponibles para hacer
búsquedas a "catalogo_rayodeluz" y damos identificadores y
títulos a las páginas de búsqueda y presentación de resultados.
Le damos a añadir y veremos que han aparecido dos
nuevos objetos dentro de la carpeta "rayodeluz". Son
"buscar_rayodeluz" y "datos_rayodeluz", que son objetos del
tipo DTML Method creados de forma automática por
Z Search Interface y que son los que implementan el formulario
HTML que nos va a permitir hacer las búsquedas y la
página de presentación de resultados de la búsqueda.

Ha llegado el momento de ver que es lo que realmente hemos creado.
Para ello nos accedemos a la interfaz de búsquedas y vemos a ver
de que opciones disponemos.
Como vemos se mantiene la cabecera y pie de la página por lo
que no se pierde la identidad del sitio. Vemos la potencia de
los mecanismos de adquisición que ya comentamos en anteriores entregas
del curso y que permiten detalles como que las cabeceras y pie de
página se compartan de forma transparente e integrada. Hemos
creado una interfaz de búsquedas y sin hacer nada por nuestra parte
se ha reutilizado la cabecera y pie por defecto.
En el formulario que se nos presenta podemos buscar por todos los
campos por los que los objetos han sido indexados. Estos campos ya
dijimos que se podía modificar dentro del propio catálogo
aunque si los cambios, deberemos de volver a generar el interfaz de
búsquedas. Vemos que nos podemos olvidar totalmente de como
se crea el formulario HTML y del nombre de los campos y a que
CGI se van a enviar los datos, Zope se encarga de todo esto por nosotros.
Si queremos que se nos muestren todos los datos que existen
en el catálogo, basta con que no rellenemos ningún campo
y se nos devolverán todos los registros del catálogo.
Las posibilidades que se abren con este tipo de búsquedas son
muy diversas y basándonos en ellas, podemos lograr mecanismos
de localización de información utilizando características
diversas muy potentes.
Conclusiones
Hemos llegado a la conclusión de este artículo a partir de la
cual le lector tiene una visión más completa de lo que se
puede llegar a hacer con Zope.
Hemos hecho un repaso general a todos los objetos Zope genéricos
y nos hemos centrado en dos de ellos, Z Search Interface y z Catalog,
los cuales nos han permitido ver lo sencillo y potente de su uso.
En futuras entregas del curso pasaremos a presentar objetos que
no forman parte de la distribución de Zope y que han sido
desarrollados por la comunidad de Zope, los zopistas. Junto
a estos nuevos objetos, también comentaremos cómo se usan
las bases de datos desde Zope, poniendo ejemplos de MySQL y
Postgres. Esperamos que esta nueva entrega haya sido del agrado
del lector y que nos siga leyendo el mes que viene.
Referencias