Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Tutoriales > Lenguajes de script > Python > Zope: El servidor de aplicaciones libre
-Tutoriales

Zope: El servidor de aplicaciones libre


Acceso a bases de datos

. Introducción

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

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

. 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

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

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

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

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

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

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.

. Referencias

 
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network