La creación de un web con Zope
Introducción
Bienvenido a esta segunda entrega del curso de Zope. En la primera
logramos bucear en Zope, su arquitectura, algunos conceptos que
le rodean y vimos incluso algún pequeño ejemplo.
En esta segunda entrega del curso de Zope vamos a analizar con
un ejemplo el proceso de publicar objetos Zope. Para ello el
lector debería tener a mano un servidor de Zope con el que
poder avanzar con los ejemplos en paralelo, ya que la forma de
aprender, es hacer las cosas uno mismo y disfrutar con los
éxitos y fracasos del proceso de una forma más cercana. De cualquier
modo, esperamos lograr que el artículo sea también de interés
para todos aquellos lectores que aún no disponen de esta plataforma
para poder jugar con ella.
Con Zope el objetivo ha sido el facilitar al máximo la
publicación de contenidos a través de páginas HTML. Con el
ejemplo que vamos a mostrar podremos analizar con más cuidado
si se ha logrado este objetivo o no ha sido así. Para ello
será fundamental observar la sencillez del entorno, su
potencia a la hora de gestionar los contenidos y los conocimientos
técnicos necesarios para publicar contenidos con Zope.
El portal de una empresa
Con la llegada de Internet nos hemos encontrado con la gran ola
de empresas de todo tipo que se lanzan
a plantar su presencia en Internet. Los beneficios que proporciona
una presencia en la red, como es por ejemplo el acceso a una potencial
una cliente mundial, no han dejado impasibles a las personas que cuidan
de estar siempre a la última. A día de hoy no sólo las empresas son las que
están desembarcando en la red: raro es el caso de una organización que
tenga algo que decir que no se haya planteado el estar en Internet.
En nuestro caso nos vamos a plantear como ejemplo la realización
de un portal para una empresa. Es una labor cada vez más demandada
por lo que puede ser un ejemplo que abra puertas al lector en
su mundo profesional. Es un ejemplo bastante completo, que encierra
muchas de las problemáticas de como llegar a mostrar una imagen
dentro de la red por parte de una organización. Y es un ejemplo
con el que muchos de los lectores tendrán que enfrentarse
en su futuro profesional.
Lo primero que hay que hacer antes incluso de plantearse con que
herramienta se va a desarrollar el web es definir que se quiere
lograr. Es decir, que contenidos se quieren poner en la red, para
quién y como se van a organizar. Nos encontramos en este momento
en el famoso campo de los arquitectos de la información, un
perfil que a pesar de que ya existía dentro del mundo del diseño
tradicional, se ha potenciado de manera muy significativa con la
aparición de Internet. Todas las compañías quieren poder expresarse
de una forma natural, organizada y que proporcione una imagen adecuada.
Una ardua labor que debe coordinar a distintos departamentos de
la compañía: comunicación, marketing, comerciales, gestión, técnico ...
En nuestro ejemplo nos vamos a centrar en el diseño del portal interno
de una compañía, cuyo objetivo es proporcionar a los distintos
departamentos de la misma libertad para informar a los demás
de sus actuaciones, con el objetivo de mejorar la coordinación
y que aumentar el flujo de información, piedras angulares para el
buen funcionamiento de una compañía.
Dentro de la amplia documentación de Zope, y para este artículo en
concreto, nos va a ser útil la "Guía para el Gestor
de Contenidos Zope". Esta guía se puede obtener del
web de Zope, en la zona de documentación. En las referencias puedes
encontrar
los detalles exactos de como descargarla para poderla leer
tranquilamente.
Organización de la información
Lo primero que necesitamos es tener claro como se van a presentar
los datos de la compañía. Normalmente nosotros vamos a ser parte
del departamento técnico y nuestra función será proporcionar los
medios técnicos para plasmar la estructura de información que nos
proporcione alguna persona con un conocimiento global del
funcionamiento de la empresa.
Supongamos que se ha decidido organizar el web de la compañía en
cuatro zonas diferencias por departamentos: comunicación, marketing,
gestión y técnico. Cada uno de los departamentos será
responsable de la gestión de contenidos de su zona, y existirá una
zona pública en cada departamento y una zona privada con información
interna. Desde una página de inicio común se podrá ir a la
zona de cada departamento. Todas las páginas de los departamentos
deberán de compartir una imagen común, cambiando el título de
la página y los contenidos, pero manteniendo una imagen homogénea.
Con estos datos ya nos es suficiente para comenzar a trabajar en
el proyecto de la empresa y mostrar la potencia y flexibilidad que
podemos ofrecer a nuestra compañía por medio de Zope. Ha llegado
el momento de dejar claro la calidad del departamento técnico de la
empresa y la de sus herramientas, basadas en software libre (siempre
es bueno auto motivarse cuando comienza un proyecto :-)).
Primeros pasos en la creación del web
Nuestra compañía se llama Rayo de Luz por lo que parece lógico
que el primer paso que debemos de dar es crear una nueva
carpeta (folder) para guardar en él el contenido del web que vamos a crear.
Para ello, tal y como mostramos en el último artículo, accedemos
a la pantalla de gestión de Zope (http://localhost:9673 en Debian)
y pasamos a dar este primer paso utilizando la interfaz web de Zope
para la publicación de sitios web.

Ya tenemos la carpeta para el web creada y hemos dejado seleccionadas
las opciones de crear una interface pública, para que todo el mundo
pueda acceder a dicho directorio, y de que se cree una carpeta para
los usuarios de esta nueva zona. Gracias a este carpeta de usuarios
vamos a poder definir usuarios y grupos dentro de la zona del
web de la compañía, usuarios que no serán visibles para otras
publicaciones que hagamos con este servidor Zope. Iremos poco a
poco viendo la potencia de control de acceso y operación de que
dispone Zope, una de las características que nos pueden hacer
terminar de decantarnos por este gran producto.
La zona de los departamentos
Desde la página principal de nuestra compañía lo mejor que
podemos hacer es poner enlaces a los distintos departamentos
que forman la compañía un logo de la misma para ir creando
la imagen corporativa y mostrarla a nuestros empleados, los
visitantes del sitio que estamos construyendo. Para cumplir
este objetivo nos vamos a la consola desde la que
gestionamos zope (http://localhost:9673/manage) y seleccionamos
la carpeta "rayodeluz".
Quizá es un buen momento para recordar al lector que todo lo
que está viendo, a pesar de estar organizado como si fueran
ficheros de directorios, son objetos, no son ficheros. La carpeta
"rayodeluz" es un objeto contenedor con una serie de propiedades.
Dentro de este objeto, que es muy similar a una carpeta, nos
encontramos con muchos otros objetos, que también pueden ser
contenedores, permitiendo la aparición de estructuras en árbol,
una abstracción a la que estamos todos acostumbrados gracias
a los sistemas de ficheros.
Estamos dentro de la carpeta (objeto) "rayodeluz", que acabamos de
crear en el anterior apartado, y cuyo único objeto es un
DTML Document llamado "index_html", que se crea de forma
automática cada vez que creamos una carpeta. Cuando a través
de una URL accedemos a la carpeta, el ORB de Zope de forma
automática nos devuelve el objeto "index_html". De nuevo, es
una abstracción muy similar a la que hacen los servidor de web
como Apache, donde el fichero índice de los directorios se suele
llamar "index.html". El objeto "DTML Document" llamado "index_html"
podemos interpretarlo como un fichero que está dentro de la
carpeta "rayodeluz", aunque el lector tiene que tener en cuenta
que en realidad es un objeto que permite hacer con él bastantes
más cosas que con un simple fichero. Esta insistencia en la
idea de que todo son objetos es fundamental para lograr comprender
la arquitectura con toda su potencia, y no quedarnos en una
interpretación demasiado simplista de lo que es Zope.
Vamos a editar el objeto "index_html" para ver como podemos
modificar su contenido e incluir el índice a los departamentos de
la compañía y el logo.
Este sencillo contenido es el que genera la página HTML
siguiente cuando accedemos a la URL: http://localhost:9673/rayodeluz.
El contenido por defecto de "index_html" hace referencia a la
una serie de variables DTML que definen la cabecera y pie de
la página, y el título y el nombre del documento actual. Todas
estas variables se buscan dentro del contenedor en el que esté
el objeto "index_html", es este caso dentro de "rayodeluz".
En nuestro caso todas estas variables no están definidas en este
objeto por lo que ¿de dónde las saca Zope?.
Aquí ha salido
a relucir uno de los mecanismos más potentes de Zope, mecanismo
conocido como adquisición. Por este proceso, si una variable
no se encuentra en el contenedor actual se busca en los contenedores
superiores, hasta dar con su valor. De esta forma se pueden centralizar
valores que son luego adquiridos por toda una jerarquía de objetos.
Veremos que no sólo afecta este mecanismo a la variables, si no que
se aplica en otras ocasiones, convirtiendo a la adquisición en uno
de los mecanismos estrella de Zope. En nuestro caso la cabecera y
pie por defecto, los que se incluyen en la carpeta raíz de Zope,
no nos valen, por lo que nos vamos a crear dos objetos Documento DTML
cuyos identificadores sean "standard_html_header" y "standard_html_footer"
que serán utilizados por todas las páginas HTML del web de
nuestra compañía. Vamos con ello.

Ya tenemos creado el nuevo objeto que servirá de cabecera para todas
las páginas que creemos como parte del web de la compañía. En general,
todas estas páginas serán documentos DTML aunque cuando sea necesaria
más interactividad, por ejemplo a través del intercambio de información
entre el cliente web y Zope, utilizaremos otras alternativas.
El contenido de esta nueva cabecera es el siguiente:
Como vemos, utilizamos la variable "var title_or_id" para que la todas las páginas
tengan como título HTML el título que se le de al objeto DTML en
el que residen. Tras ello definimos un BODY HTML con un fondo blanco
e incluimos una imagen como logo. Pero aquí tenemos un problema.
Este imagen es un fichero real, no un objeto Zope y sin embargo, sólo
podemos hacer referencia a objetos que residan dentro de Zope
para construir la página.
Para resolver este inconveniente tenemos
la posibilidad de importar imágenes en Zope, que pasarán a ser objetos
disponibles para todos los demás objetos de Zope. Para añadir
esta imagen lo primero que hacemos es crearnos una carpeta
para almacenar todas las imágenes y tras ello, nos metemos en
esa carpeta, a la que hemos llamado "img", y añadimos un nuevo
objeto de tipo "File". Como identificador del objeto tenemos que dar
el nombre que utilizamos para referirnos a esta imagen dentro de
las páginas de Zope, y el título podemos elegir el que
queramos. Pulsando el botón de "Browse" podemos navegar por
nuestro sistema de ficheros local a la búsqueda de la imagen.
Una vez localizada pulsamos sobre el botón "Add" y ya tenemos
dentro de Zope la imagen disponible. Podemos ver que una
vez dentro de Zope, este automáticamente le asigna un tipo
MIME y podremos visualizar la imagen accediendo a la opción de
"View" presente en todos los objetos. Si ahora probamos a
visualizar la cabecera veremos que ya se muestra de forma
correcta la imagen.

A lo largo de todo el apartado anterior hemos sentado las bases
de la construcción de nuestro web con Zope. Si el lector ha ido
leyendo con atención, a estas alturas ya estará en disposición
de avanzar muy rápido con la creación del web con Zope. El
siguiente paso es modificar el pie que va a aparecer en todas
las páginas que cuelguen de la carpeta "rayodeluz", algo
posible gracias al mecanismo de adquisición. Esta modificación
es totalmente paralela a la de la cabecera. Hay que crear un
nuevo documento DTML dentro de "rayodeluz" con el nombre
"standard_html_footer". Este HTML será incluido de forma
automática en todos los documentos DTML nuevos, y estos documentos
son los que constituyen las páginas web del sitio.

Bueno, pues ya hemos logrado construir las cabeceras y pies de
página para todas las páginas presentes y futuras del web.
Sólo nos queda meter dentro de "index_html" los enlaces a
las distintas secciones de la compañía. Para ello nada mejor
que una simple lista HTML con enlaces a los distintos
directorios de cada departamento. Mostremos de nuevo como
se inserta este HTML. A partir de este momento ya daremos por
supuesto que el lector se maneja con la interfaz de Zope y
sabe como editar los objetos y su contenido.

Este contenido nos genera al fin la página principal de la empresa.
Es un poco sencilla pero no olvidemos que nosotros somos
simples técnicos. Ya se encargará nuestro departamento de diseño
de llevarse las manos a la cabeza cuando vea la página y hacer
una maqueta que deja boquiabiertos a los navegantes de las páginas
web de la compañía. Y ese esquema lo podremos introducir dentro
de la cabecera estándar y pasar a ser utilizado de forma automática
por todas las páginas que cuelguen de "rayoluz". Un trabajo de
días que nosotros podremos hacer en unas pocas horas y podernos
dedicar a descansar en el demás tiempo.
Control de acceso
Bueno, ya llegado el momento de comenzar a crear las páginas
del departamento técnico. En ellas existirá información pública
para todos los empleados de la empresa como los pasos para
configurar el acceso a Internet de los computadores, las instrucciones
básicas de mantenimiento de los equipos, las normas básicas de
navegación por Internet y uso del correo electrónico y los
correos y teléfonos de contacto de las personas del departamento.
Pero no toda la información que va a estar dentro de nuestro
departamento debe ser pública. Los datos sobre las claves de acceso
a las máquinas como administrador, la gestión de IP de los equipos
y toda la biblioteca de documentos técnicos, así como un foro
de discusión interno, serán partes privadas.
Creamos una nueva carpeta para incluir las páginas del departamento
técnico, y como identificador utilizamos "tecnico" que es el nombre
que dimos como enlace en la página principal. Dentro de esta
carpeta modificamos el objeto "index_html" para reflejar
la información del departamento y ponemos enlaces a
distintas páginas donde se amplía la información.
Una vez hecho esto, vamos a crear una carpeta llamada "interno" donde
vamos a incluir toda la información que debe ser sólo accedida
por las personas de nuestro departamento.
El acceso a esta carpeta llamada "interno" queremos que sea restringido.
Para ello nos vamos a dicha carpeta y seleccionamos la solapa
"Security" donde se definen las políticas de seguridad de acceso
a los distintos objetos de esta carpeta. En general estos permisos se
"adquieren" de la carpeta superior. De nuevo sale a la palestra el
mecanismo de adquisición: si algo no existe en el contenedor actual,
se viaja a los contenedores superiores en la jerarquía buscándolo.
De esta forma podemos tener centralizada la seguridad de todo el
sitio en la carpeta raíz. Veamos los permisos que vienen por defecto
en la carpeta raíz, y que son los que heredan todos los nuevos
contenedores que vayamos creando.

En estas imagen aparecen sólo parte de los permisos, pero son
los que queremos destacar en este instante. La primera columna se
refiere al usuario anónimo. Si aparece seleccionada esta opción,
un usuario sin autenticarse será capaz de realizar esa operación.
Por ejemplo, tenemos seleccionado "View" por lo que cualquier usuario
podrá ver todas las páginas DTML por defecto. También podrá utilizar
el objeto "Z Search Catalog" o utilizar métodos para acceder a las
bases de datos. Los permisos que aquí aparecen se pueden ampliar y
se pueden crear nuevos roles, a parte del de usuarios anónimo, el
de administrador y el de dueño del recurso.
Vemos que por ejemplo el usuario anónimo no tiene acceso a las
pantallas de gestión de Zope, algo normal ya que desde allí se
puede modificar fácilmente todo el web.
Nuestro objetivo es que para entrar en el directorio "interno" del
la parte de departamento técnico, sea necesario autenticarse en
el sistema. Para ello nos vamos a dicha carpeta, accedemos a
la solapa de seguridad y modificamos la operación de "View" para
que no se adquiera. De esta forma sólo podrán ejecutar esa
operación los usuarios que tengan el rol de administradores.
Para probar que ahora se nos pide que nos autentiquemos, podemos
apagar el navegador por completo e intentar acceder a dicho directorio.
Si el lector ha metido una clave de administrador en algún momento,
y esperamos que lo haya hecho para poder seguir el ejemplo, debe
apagar el navegador para que deje de tener efecto esta clave para
Zope.

¿De dónde consulta Zope este usuario que se nos pide? Recordemos
que a la hora de crear una carpeta teníamos al opción de crear
una carpeta de usuarios asociada a ella. El primer sitio en el que
Zope va a buscar el usuario que se introduzca en la caja de autenticación
va a ser dentro de esta carpeta de usuarios "user_folder". Cuando
se crea un usuario, se le asigna un rol. Es este rol el que define
que puede y que no puede hacer un usuario. En este caso, para acceder
a esta carpeta protegida, es necesario que el usuario tenga el rol
de "manager". Vamos a crear un usuarios con estos permisos. Queremos
que este usuario sólo tenga el rol de "manager" para esta carpeta
en concreto. Por ello lo creamos en el "user_folder" de esta carpeta.
Este usuario será "manager" en la carpeta actual y todas las que
cuelguen de él, pero no lo será en carpetas superiores. Con este
sistema tenemos una gran potencia a la hora de definir permisos
a regiones concretas de tal forma que haya distintos administradores
para cada zona del sitio.

Este nuevo usuario tendrá el rol de "manager" por lo que
podrá acceder a la zona protegida y, más aún, podrá
acceder a la interfaz de gestión y modificar el contenido
de su zona desde la interafaz Zope.
Iremos viendo a lo largo del curso la enormes posibilidades que ofrecen
estos mecanismos de gestión de usuarios que harán triviales
las labores más complejas de control de acceso.
Conclusiones
Esta entrega del curso de Zope ha sido muy práctica. Con ella
pretendíamos que el lector se familiarizará con toda la interfaz
de Zope para l creación de contenidos, un sistema sencillo pero
que hay que entenderlo para poder explotar toda su potencia y
sencillez.
Hemos dado un primer repaso a la construcción de páginas, a los
efectos de la adquisición de contenido entre carpetas y a la
importación de ficheros externos a Zope dentro de la plataforma.
Por último hemos presentado los mecanismos de control de acceso a los
recursos que nos proporciona Zope, aunque no hemos más que los
primeros pasos que nos permite este sistema de gestión de usuarios.
En la próxima entrega del curso terminaremos de detallar como
se construyen los webs dentro de Zope y nos centraremos en los
objetos que nos proporciona Zope par facilitarnos la creación
rápida y robusta de completos sitios web en la red. Esperamos
que el lector se haya sentido lo suficientemente atraído como
para instalar Zope en su computador y comenzar a construir
sus propios sitios.
Referencias