Guía 3.1 Aplicación Once

Igor Támara
Gimnasio Fidel Cano
igor@tamarapatino.org

versión 0.1

7 de julio de 2005

Esta guía describe un ejemplo de uso de Zope y Postgresql para hacer consultas sobre tablas y hacer inserción de datos desde la interfaz web. Se asume que se tienen conocimientos de HTML, que se ha trabajado previamente con la interfaz de administración de Zope y que se sabe crear métodos de Zope. Las preguntas pueden responderse algunas a partir de la bibliografía y para otras es bueno emplear google y revisar y comparar. La versión más actualizada de este documento la puede encontrar en http://igor.tamarapatino.org/gfc/once/aplicacion/guia31.html


El autor es Igor Támara y los derechos de reproducción pertenecen al Gimnasio Fidel Cano

Configuración de Postgresql y una BD con Zope

En este documento no se trata cómo se instala/configura Postgresql o Zope, o el módulo zpsycopg o cualquier otro módulo de conectividad. Simplemente se asume que el escenario es limpio y los permisos, claves y usuarios son adecuados para que el trabajo sea posible.

Para este documento se asume que la base de datos es tal como se presenta en este ejemplo , y que hay algunos datos presentes en la base de datos, el nombre de la base de datos es mibase , el usuario es pepito y la base de datos corre sobre la misma máquina localhost con la clave p3r3z.

Una vez se haya ingresado a la interfaz de administración, en la lista de objetos de Zope para adicionar se elije ''Z psycopg Database Connection''.

Id

Nombre con el que se identificará el objeto de conexión. Se supondrá que se eligió como nombre mibasedb.

Title

Nombre completo que aparece al desarrollador.

Databes Connection String

valores con los cuáles se especifica la base de datos, el servidor, el usuario y la clave, para este ejemplo se colocaría dbname=mibase user=pepito password=p3r3z ;host=localhost

Debería aparecer la nueva conexión mibasedb, la cual tendrá los permisos que tenga pepito sobre mibase.

Consultas sobre la base de datos

Tanto las consultas SELECT como las adiciones INSERT INTO, actualizaciones UPDATE sobre las bases de datos se lograrán con objetos Z SQL Methods que se crean como de costumbre de la lista de selección para añadir objetos.

Id

Como de costumbre el nombre que se colocará al objeto, por ejemplo: enviadoresquery

Title

Nombre completo que aparecerá para el desarrollador

Connection Id

Se usa en este caso mibasedb

Arguments

Se mostrará su uso en un ejemplo posterior.

Query Template

Una consulta sobre la base de datos, en este caso se puede probar con un ejemplo que NO reciba ningún argumento. En este caso se puede emplear SELECT e.id AS idenviador,p.nombres||' '||p.apellidos AS nombreenviador,p.correo AS correoenviador from enviadores AS e, personas AS p WHERE e.id=p.id ORDER BY nombreenviador

Se pueden hacer pruebas sobre esta consulta con Test.

Una vez se tiene la consulta lista, es posible mostrar información por pantalla de la misma, por ejemplo, una tabla que imprima los nombres y correos electrónicos producto de la consulta descrita anteriormente.

Se crea un método dtml y en el método dtml se puede adicionar el siguiente código :

 <ul>
 <dtml-in enviadoresquery>
   <li><a href="mailto:<dtml-var correoenviador>"><dtml-var correoenviador></a></li>
 </dtml-in>
 </ul>

Que desplegaría una lista no enumerada con los nombres de aquellos que tienen derecho a enviar información y con el enlace a su correo electrónico registrado.

Formularios para adición de información

Como es usual, se compone de 2 métodos dtml, el primero es un formulario html y el segundo va a ser un objeto dtml de respuesta al formulario, en el cuál las variables serán los nombres de los componentes del formulario.

A continuación los ejemplos :

Formulario de datos

En este ejemplo se va a llamar formulariodatos

 <form action=insercionpersona method=post>
   <b>Nombres</b>: <input type="text" name="nombresp"><br/>
   <b>Apellidos</b>:<input type="text" name="apellidosp"><br/>
   <b>Correo</b>: <input type="text" name="correop"><br/>
   <b>Login</b>: <input type="text" name="loginp"><br/>
   <input type="submit" value="Adicionar">
 </form>

Método Z SQL de inserción

En este ejemplo se va a llamar insercionpersonainsert

La diferencia con el ejemplo anterior es que en Arguments se hará una lista separada por espacios con los nombres de los argumentos que se van a usar : nombresp, apellidosp, correop y loginp, aquí se debe notar la coincidencia entre los nombres de cada uno de los campos con los argumentos, no importa el orden.

Por otra parte en Query Template se usaría :

 INSERT INTO personas (apellidos, nombres, correo, login) VALUES
      (<dtml-sqlvar nombresp type="string">, 
       <dtml-sqlvar apellidosp type="string">, 
       <dtml-sqlvar correop type="string">,
       <dtml-sqlvar loginp type="string">
      )

Método dtml de respuesta

El método dtml se llamará insercionpersona en este caso, y se invocará el método Z SQL que se creó con anterioridad.

Se debe notar que action de post del formulario formulariodatos se hace referencia en action hacia este método.

Para hacer la inserción de los valores que provendrían del usuario, bastará con invocar el método Z SQL y por supuesto, informar al usuario acerca de los cambios que se llevaron a cabo :

 <dtml-call insercionpersonainsert>
 <p>Se adicionó una persona al sistema con los siguientes datos:
 <b>Nombres</b>: <input type="text" name="nombresp" value="<dtml-var nombresp>"><br/>
 <b>Apellidos</b>:<input type="text" name="apellidosp" value="<dtml-var apellidosp>"><br/>
 <b>Correo</b>: <input type="text" name="correop" value="<dtml-var correop>"><br/>
 <b>Login</b>: <input type="text" name="loginp" value="<dtml-var loginp>">

Protección de la información visible al público

Dado que hay ciertas zonas en los sistemas de información que deben ser protegidas, pero hay cierta información que puede ser visible para todos, se recomienda colocar información sensible en subdirectorios para que esta esté protegida por el sistema de seguridad de zope, es decir, que solamente usuarios autenticados puedan acceder a los formularios de adición de información al sistema, mientras que otras porciones estén disponibles para cualquiera que esté de visita.

Se creará un directorio llamado seguro, en el cuál se debería colocar aquellos métodos que modifican información del sistema, mientras que los formularios que sirvan para ofrecer información al público en general estarán por fuera del mismo. La aproximación será permitir Access content information en el tab Security a authorized y eliminando Acquire permission settings.

El resultado será que únicamente los usuarios que se hayan autenticado podrán ingresar al directorio seguro, accediendo al sistema completo con posibilidad para adicionar, actualizar o eliminar en tanto que se haya hecho la creación de los formularios correspondientes.

Preguntas

Todo lo que se le solicite que exprese gráficamente, por favor publíquelo en su cuenta y envíe un correo a la lista de correo de los otros estudiantes. Las gráficas con más sentido y expresividad entrarían a hacer parte de estas guías si usted lo desea.

  1. Exprese gráficamente la interacción entre Zope psycopg y postgresql

  2. Exprese gráficamente el uso del formulario, el método Z SQL y el método de respuesta.

  3. Busque qué tipos de datos se puede especificar al usar las variables en Query Template

  4. Modifique el ejemplo para validar que la persona NO pueda adicionar datos nulos en ningún campo.

  5. En un archivo llamado queries.sql cree todas los templates de inserción y consulta que vaya a necesitar para su sistema. Jerarquice por inserción, consulta , borrado y actualización, de acuerdo a los casos de uso. Bautice a cada uno de sus métodos de forma tal que pueda identificarlos fácilmente a la postre.

  6. Cree por lo menos 5 formularios para hacer la adición de los resultados, enlazándolos con las páginas de respuesta correspondientes, sin hacer todavía la invocación de los métodos Z SQL.

  7. Verifique que por lo menos dos casos de uso que haya especificado están siendo cumplidos con la construcción que ha hecho a partir de los formularios, los métodos z SQL y los métodos de respuesta y que está dando suficiente retroalimentación al usuario para que pueda darse cuenta de la información con que cuenta el sistema.

  8. Use lo que lleva del sistema para ir adicionando datos y hacerlo cada vez más completo.

  9. Cree un usuario y ofrézcale permisos para que pueda ayudarle a hacer pruebas adicionando información. Déle la clave de este usuario a una persona conocida para que también pueda hacer pruebas sobre el sistema.

  10. Verifique que en sus páginas hay enlaces entre unas y otras para facilitar la navegación y ofrézcale lo que lleva construido del sistema a dos personas para que lo evalúen y solicíteles que le envíen correos de retroalimentación para mejorar el sistema construido. Tenga en cuenta que usted tiene contacto con más de 10 profesores en el colegio y con más de 100 estudiantes, además de sus amig@s fuera del colegio y sus familiares. No vale el profesor de sistemas de su colegio.

Bibliografía