Despu�s de dar a conocer la arquitectura Zope, mostrar un ejemplo de creaci�n de un sitio con Zope, Rayo de Luz, y presentar los objetos b�sicos en Zope, ha llegado el momento de atacar otro de los temas m�s importantes del desarrollo de aplicaciones en Internet: las bases de datos.
�Adaptador de acceso a base de datos
La idea detr�s de los adaptadores de acceso a base de datos de Zope es la tradicional dentro del mundo de las bases de datos: crear una capa de abstracci�n con la interfaz propia de la base de datos. De esta forma se logra una interfaz unificada para acceder a cualquier base de datos que tenga adaptador para Zope. Esto es algo totalmente similar a nivel conceptual a ODBC, JDBC o Perl DBI.
En la actualidad existen para Zope adaptadores para acceder a:
- MySQL
- Postgres
- Oracle
- Sybase
- Interbase
- ODBC
- Gadfly
Al tener un adaptador para ODBC podemos acceder a casi cualquier base de datos, ya que ya es raro a d�a de hoy que una base de datos no sea accesible al menos desde ODBC.
En el caso del software libre los adaptadores que m�s nos interesan son el de MySQL y el de Postgres. En el caso de Postgres se dispone de varios adaptadores, siendo la base de datos mejor soportada desde Zope, a parte de la propia ZODB, que recordemos es la base de datos que usa Zope para guardar todos los objetos. En este art�culo nos vamos a centrar en MySQL, pero todo lo que digamos es id�ntico para cualquiera de los otros adaptadores a excepci�n de la instalaci�n del producto que contiene el adaptador para cada base de datos concreta.
A lo largo del art�culo vamos a ir cubriendo el proceso de instalaci�n de un adaptador de acceso a base de datos desde Zope, su uso desde Zope y algunas herramientas que se basan en estos adaptadores y que permiten de forma sencilla crear formularios para almacenar datos en las base de datos.
�Instalaci�n del adaptador de MySQL
Los adaptadores de Zope para acceso a base de datos no son otra cosa que productos Zope. Por ello para su instalaci�n localizamos el producto desde las p�ginas del portal de Zope y lo instalamos. En el caso de la distribuci�n Debian 2.2/Potato es muy sencilla la instalaci�n de los adaptadores de MySQL y Postgres ya que dispones de paquetes para ello.
faro:/shared/acs# apt-get install zope-mysqlda Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: python-mysqldb The following NEW packages will be installed: python-mysqldb zope-mysqlda 0 packages upgraded, 2 newly installed, 0 to remove and 59 not upgraded. Need to get 0B/42.8kB of archives. After unpacking 174kB will be used. Do you want to continue? [Y/n] Media Change: Please insert the disc labeled 'Debian GNU/Linux 2.2 r0 _Potato_ - Official i386 Binary-3 (20000814)' in the drive '/cdrom/' and press enter Selecting previously deselected package python-mysqldb. (Reading database ... 50092 files and directories currently installed.) Unpacking python-mysqldb (from .../python-mysqldb_0.1.1-1.deb) ... Selecting previously deselected package zope-mysqlda. Unpacking zope-mysqlda (from .../web/zope-mysqlda_1.1.3-1.deb) ... Setting up python-mysqldb (0.1.1-1) ... Setting up zope-mysqlda (1.1.3-1) ... For Zope to recognize the new/updated package, it will need to be restarted. Restart Zope now? [Y] Y
Podemos ver que tambi�n se instala el paquete python-mysqldb. No olvidemos que casi todo en Zope est� hecho en Python, aunque Perl poco a poco ir� ocupando un papel importante, y python-mysqldb es una librer�a de Python para acceder a MySQL. No vamos a cubrir en el art�culo la instalaci�n manual del adaptador pero el lector puede encontrar informaci�n al respeto dentro de la p�gina del adaptador de MySQL que se encuentra en las referencias.
![Adaptador para Zope de MySQL](/cursos_descargas/zope/ZMySQLDA.jpg)
Si todo ha ido bien deber�amos de tener un nuevo objeto disponible en Zope, el de conexi�n a un servidor de bases de datos MySQL. Si lo seleccionamos por primera vez nos pedir� los datos necesario para poder conectar con la base de datos. Vamos a partir de que ya tenemos instalado el servidor de MySQL en el sistema y vamos a crear la base de datos para RayodeLuz y a dar permisos al usuario "rayodeluz" para que pueda sacar datos de ella y modificarlos, aunque no borrarlos. MySQL dispone de la funci�n de SQL GRANT que es muy �til en este tipo de situaciones ya que permite controlar con mucha precisi�n y sencillez que puede hacer cada usuario en la base de datos. Pero como no estamos en un art�culo de MySQL, no profundicemos m�s en el tema. Los comandos a enviar a MySQL desde su cliente "mysql" son:
mysql> create database RayodeLuz; mysql> GRANT SELECT, UPDATE, INSERT ON RayodeLuz.* TO rayodeluz@localhost;
Ahora ya desde la pantalla de configuraci�n de conexiones MySQL configuramos estos datos para poder acceder al servidor de MySQL y vemos que se establece una conexi�n con MySQL. Este objeto que se acaba de crear es ya una conexi�n permanente con MySQL que nos sirve para, a trav�s de �l, poder enviar comandos SQL a la base de datos, entre otras cosas que ya iremos viendo.
![Configuración de conexión a MySQL](/cursos_descargas/zope/ConexionMySQL.jpg)
�Creaci�n de una base de datos de Clientes
Ahora que busc�bamos un buen ejemplo para mostrar el funcionamiento de las bases de datos en Zope, recibimos una llamada del responsable del departamento comercial: necesitan un sistema de seguimiento de contactos con los clientes y los potenciales clientes de la empresa. Bien, esto es sencillo. Nos creamos una tabla donde almacenamos esta informaci�n, la cual se llenar� con los datos que vayan introduciendo los comerciales de la empresa y en la que tendremos que poder hacer b�squedas por distintos criterios.
Manos a la obra: lo primero es crear una tabla para almacenar la informaci�n de los contactos comerciales.
CREATE TABLE contactos ( id int(11) DEFAULT '0' NOT NULL auto_increment, nombre varchar(64), contacto varchar(64), telefono varchar(32), email varchar(32), url varchar(32), comentario text, autor varchar(32), sello timestamp, PRIMARY KEY (id) );
Para poder ejecutar este comando podemos utilizar ya la conexi�n con la base de datos que hemos creado. Vemos que entre todos los objetos que tenemos creados como parte del sitio de Rayo de Luz, uno de ellos es la conexi�n a base de datos MySQL.
![Objetos en Rayo de Luz](/cursos_descargas/zope/ObjetosRayodeLuz.jpg)
Si seleccionamos el objeto "MySQL_database_connection" tenemos una serie de posibilidades como son ver la descripci�n del objeto para ver a que base de datos est� conectando y como que usuario, podemos desconectar al objeto de la base de datos y volverlo a conectar y una de las solapas accesibles para este objeto se llama "Test". Tras ella tenemos una simple interfaz que nos permite hacer peticiones a la base de datos.
![Envío de comandos a la base de datos](/cursos_descargas/zope/TestConexion.jpg)
Si intentamos enviar la sentencia SQL de creaci�n de la tabla recibimos un mensaje de error ya que en la sentencia de "GRANT" (permitir) del usuario "rayodeluz" no incluimos la posibilidad de crear tablas. Basta con hacer un nuevo GRANT de la siguiente forma:
mysql> GRANT CREATE ON RayodeLuz.* TO rayodeluz@localhost; mysql> FLUSH PRIVILEGES;
Es bueno tras realizar este tipo de cambios volver a reconectar con la base de datos para que tenga en cuenta las modificaciones. Para ello basta con ir a la ventana principal del objeto de conexi�n a la base de datos y pulsar sobre el bot�n de desconectar. Luego se pulsa de nuevo el bot�n de conectar y ya tendremos de nuevo abierta la conexi�n con la base de datos. Si volvemos a la solapa "test" desde la que podemos hacer peticiones y enviamos el comando SQL de creaci�n de la tabla, esta ser� creada. Algo que podemos verificar con el comando SQL "show tables".
Vemos pues que tenemos ya una conexi�n con la base de datos y que podemos enviar peticiones SQL a trav�s de este objeto. Es m�s, los resultados de las peticiones SQL se nos presentan en tablas HTML que incluso podr�an servir para mostrar los resultados de las b�squedas pero, �c�mo creamos ahora los formulario que nos permitan introducir datos en la base de datos? �Y aquellos que nos permiten realizar b�squedas?
La primera gran utilidad que tenemos son los objetos ZSQL Methods que se asocian a una conexi�n a una base de datos y permiten construir peticiones SQL. Las dos funcionalidades que queremos cubrir son la inserci�n de datos y su posterior consulta y como vemos a continuaci�n, ambas funciona lides quedan cubiertas con m�todos SQL.
Para crear un formulario de inserci�n de datos en la tabla creamos un nuevo objeto ZSQL en el que como par�metros aparezcan los campos que queremos poder introducir en la base de datos y la petici�n sea de tipo INSERT. Veamos una captura de pantalla de ese nuevo objeto ZSQL y su definici�n:
![Creación del formulario para insertar nuevos contactos](/cursos_descargas/zope/FormularioContactos.jpg)
Vemos que el procedimiento es realmente sencillo y v�lido de forma general para cualquier tipo de formulario. De cara a la inserci�n de datos este objeto se visualizar� de la siguiente forma:
![Formulario para la inserción de nuevos contactos](/cursos_descargas/zope/InsercionContacto.jpg)
Ahora que ya sabemos como introducir datos vamos a ver como recuperarlos de la base de datos. De nuevo utilizamos para ello un ZSQL Method y su configuraci�n la podemos observar a continuaci�n:
![Formulario para la búsqueda de contactos](/cursos_descargas/zope/BuscarContacto.jpg)
Pero para las b�squedas disponemos de otro sistema un poco m�s sencillo de crear y m�s potente, los objetos Z Search Interface. Con ellos, la construcci�n de complejas peticiones de b�squeda dentro de la base de datos se hace de una forma mucho m�s c�moda y que adem�s, podremos personalizar de forma sencilla. Un objeto Z Search Interface utiliza un ZSQL Method para definir sobre que campos se quiere poder buscar y genera de forma autom�tica el formulario de b�squeda y la p�gina de presentaci�n de resultados. Este objeto ya lo utilizamos cuando hablamos de las posibilidades de catalogaci�n de contenidos en Zope, utilizando ZCatalog, y para construir el formulario de b�squeda y la p�gina de presentaci�n de resultados s�lo necesita un objeto que sea "buscable". Y los ZSQL Method lo son, por lo que podemos seleccionar por ejemplo nuestro m�todo de localizaci�n de contactos para construir sobre �l la interfaz de b�squeda. Como ya hablamos en su momento a partir de Z Search Interface se crean dos nuevos objetos Zope mediante los cuales el usuario puede introducir los datos de la b�squeda y puede ver los resultados.
![Creación del Z Search Interface del método SQL](/cursos_descargas/zope/ZSI-Contacto.jpg)
Pr�cticamente ya hemos visto como se usan las bases de datos relacionales desde Zope. La gran parte que quedar�a por analizar es ver como desde DTML y desde clases Python se pueden utilizar estos objetos de acceso a base de datos para poder utilizar de una forma m�s directa la informaci�n que se guarda en las bases de datos relacionales. Pero como durante el curso no hemos cubierto aspectos de programaci�n de m�s bajo nivel y hemos preferido seguir una l�nea m�s orientada a la construcci�n de sitios a partir de objetos ya realizados, no vamos a entrar en estas posibilidades.
Las bases de datos relacionales han sido durante los �ltimos a�os el lugar preferido en la industria del desarrollo software para guardar los datos de las aplicaciones. El lograr poder acceder desde Zope a este tipo de fuentes de datos de forma sencilla nos permite estar tranquilos cuando pensemos en la integraci�n de Zope con sistemas ya existentes. Y al disponer Zope de acceso tanto a bases de datos relacionales como a su base de datos orientada a objetos, ZODB, le convierte en una arquitectura muy flexible que puede dar cabida a complejas arquitecturas.
La llegada de Internet a impulsado a�n m�s la importancia de las bases de datos. La posibilidad de construir bases de datos de forma distribuida a trav�s de la red y al necesidad cada vez mayor de gestionar ingentes cantidades de datos hacen que MySQL y Postgres ocupen a d�a de hoy un papel estrella dentro del desarrollo de aplicaciones en Internet. Zope puede acceder sin problemas a estas bases de datos por lo que entornos combinados donde aplicaciones Perl o PHP trabajen con partes Zope son perfectamente factibles ya que se pueden compartir la informaci�n en las bases de datos. Seg�n madura el desarrollo de aplicaciones para Internet, este tipo de entornos mixtos cobrar�n cada vez m�s importancia ya que en muchos proyectos se ahorrar� mucho tiempo gracias a la reutilizaci�n de diferentes partes ya desarrolladas. Un ejemplo podr�a ser un portal para desarrolladores utilizando el Portal Tookit de Zope pero que para la parte de gesti�n de los proyectos, utilice Source Forge, basado totalmente en PHP, pero que guarda sus datos en MySQL y, para la parte de foros, se utilizar�a slashcode, el software en el que se basa Slashdot y BarraPunto, y que est� desarrollado en Perl, pero que de nuevo, guarda toda la informaci�n en una base de datos MySQL.
�Conclusiones del curso de Zope
Con esta 5 entrega damos por finalizado este primer curso introductorio a Zope, que se ha publicado originalmente en Todo Linux, pero que se podr� obtener en formato electr�nico desde mi p�gina personal dentro de la secci�n de Internet con licencia GFDL pasado un mes desde la publicaci�n de esta �ltima entrega.
El curso ha tenido una buena aceptaci�n y gran parte de los lectores han perdido el miedo a lanzarse con Zope tras ver lo sencillo que resulta su uso.
En la primera entrega del curso analizamos la arquitectura de Zope, sencilla una vez que se conocen sus piezas, pero que hay que entender de forma correcta para saber como hacer las cosas en Zope. Las partes m�s destacadas de esta arquitectura eran la base de datos de objetos y el ORB de Zope, que se encarga de transformar las URL que llegan a Zope en peticiones sobre los objetos Zope. No hay que olvidar en ning�n momento el concepto clave de Zope: todo son objetos. Si el lector conoce Java, le ser� familiar las implicaciones que conlleva esta afirmaci�n. Esta homogeneidad, unida a que la persistencia de los objetos se logra utilizando una base de datos de objetos (ZODB), permite funcionalidades bastante sorprendentes como b�squedas de cualquier tipo de informaci�n en la base de datos, control de versiones, posibilidad de deshacer todo tipo de cambios ... En este misma entrega hablamos de la licencia de Zope, la ZPL, que si bien no es compatible con la GPL, la FSF la califica de software libre.
En la segunda entrega del curso ya nos pusimos un poco m�s pr�cticos y nos lanzamos tras la creaci�n del portal de la empresa Rayo de Luz, una empresa ficticia pero que nos ha servidor para ir viendo como Zope resuelve todo tipo de necesidades de una forma elegante, potente y flexible. Vimos lo sencillo que era crear un sitio con Zope, como se van a�adiendo objetos para construir el web, lo sencillo y potente que es el control de acceso de Zope, basado en roles y las distintas funciones que se pueden realizar en el sistema. Y quiz� vimos lo m�s importante de Zope: los mecanismos de adquisici�n mediante los que se heredan todo tipo de propiedades a trav�s de la estructura jer�rquica que forma la organizaci�n en objetos directorio de un sitio Zope.
Para la tercera entrega ya est�bamos m�s entrenador y nos pudimos meter a fondo con los productos Zope, las piezas a partir de las cuales construimos los sitios Zope. Vimos de donde obtener dichos productos, como se instalan y como se utilizan, dando un repaso al uso de todos los objetos que vienen incluidos en Zope por defecto. Por �ltimo vimos el espectacular mecanismo de catalogaci�n de Zope que permite de forma r�pida y c�moda construir �ndices de todos los objetos que hay en la base de datos de Zope (ZODB) para luego realizar b�squedas sobre ellos.
Dentro de la cuarta entrega nos centramos en un producto Zope que da mucho juego, Squishdot, un sistema para la creaci�n de weblogs al estilo Slashdot o BarraPunto. Despu�s de ver como obtener todo tipo de productos Zope, como est�n organizados dentro del portal Zope y de llegar a Squishdot, vimos como instalarlo y como ir poco a poco configur�ndolo. Pudimos ver como en poco m�s de 10 minutos se pod�a instalar un potente sistema de foros, aunque luego fuera necesario un periodo posterior de configuraci�n del aspecto y del contenido.
Por �ltimo en esta quinta entrega hemos mostrado lo �gil que es Zope en su trato con las bases de datos relacionales, donde utiliza la metodolog�a de crear una API com�n para todas las bases de datos y que luego se vayan desarrollando adaptadores que lleven esa API a la interfaz concreta de cada base de datos. Nos hemos centrado en un ejemplo con MySQL, donde hemos visto cual es el adaptador a utilizar, como configurarlo y lo sencillo que es crear formularios de inserci�n de datos y b�squeda as� como de la presentaci�n de los resultados de las b�squedas.
Desde aqu� recordar al lector que todo el curso podr� obtenerse de Internet desde la URL http://sinetgy.org/acs en la secci�n de Internet y que tiene la puerta abierta para ayudar en la mejora de este curso y su ampliaci�n con el objetivo de que Zope vaya disponiendo de una documentaci�n en castellano que permita que cada vez m�s gente pueda descubrir este sistema de publicaci�n web y pueda basara en el sus proyectos.
Por �ltimo agredecer a Todo Linux su pol�tica en la que los autores preservan los derechos de autor sobre los art�culos permitiendo de esta forma que dichos trabajos puedan tener una audiencia mucho mayor a trav�s de su publicaci�n en la red, as� como la posibilidad de ser corregidos y ampliados.