0% encontró este documento útil (0 votos)
7 vistas

TutorialDaboParte 4

Este documento describe cómo correr aplicaciones Dabo en la web utilizando Springboard. Esto permite correr aplicaciones Dabo sin instalar nada, actualizando automáticamente el código en el servidor. También discute las ventajas de seguridad de este enfoque y los pasos para configurar el servidor y mapear las clases de negocio remotas.

Cargado por

Emanuel Toro
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas

TutorialDaboParte 4

Este documento describe cómo correr aplicaciones Dabo en la web utilizando Springboard. Esto permite correr aplicaciones Dabo sin instalar nada, actualizando automáticamente el código en el servidor. También discute las ventajas de seguridad de este enfoque y los pasos para configurar el servidor y mapear las clases de negocio remotas.

Cargado por

Emanuel Toro
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

DESARROLLANDO CON DABO

PARTE 4

LA APLICACIÓN EN LA
WEB
Corriendo su Aplicación en la Web
Las aplicaciones web son grandiosas por que requieren cero implementación y
cero penosa actualización. Sólo pegue su código en un servidor web y al navegar
hasta ella poniendo la URL en un explorador web, cualquiera puede correr su
aplicación. La gran desventaja, sin embargo, es que aun cuando puede usar
Python para alguna lógica, toda su interfaz de usuario tiene que estar en HTML y
javascript.

Dabo posee una excitante nueva tecnología llamada Springboard. Concíbala


como un explorador web: ponga en ejecución Springboard, introduzca una URL, y
tiene una aplicación Dabo corriendo en su escritorio. Sin instalar nada;
Springboard administra todo ello por usted. Aun mejor, actualice su código en el
servidor web y Springboard escogerá la última versión todo el tiempo, así que
usted disfrutará la misma implementación cero y la misma actualización sin dolor
como en las aplicaciones web basadas en explorador web.
Hay otras ventajas en la ejecución de aplicaciones Dabo en la web, con la
seguridad estando el el tope de la lista. Para el tipo de aplicacones que hemos
desarrollado hasta aquí, usted tiene que servir sus datos a través de la web
abriendo su base de datos a requerimientos externos. Aun cuando pueda tomar
previsiones para hacerlo tan seguro como sea posible, esto es todavía un punto
de entrada para que atacantes pueddan comprometer su sitio. También, su lóguca
de negocios puede contener informacion propietaria acerca de como trabaja su
negocio que un competidor suyo podría utilizar en contra de usted; con una
aplicación basada en Springboard, la lógica de negocio permanece en el servidor
y sólo la IU y los obetos de negocio proxy son enviados al cliente. Estos objetos de
negocio locales saben como comunicarse con el servidor, pero no poseen ningún
acceso a datos ni validación.

Configuración del Servidor


Hay un excelente documento que describe este proceso que ya hemos publicado:
Crear una Aplicación Web con Dabo. Usted puede referirse a éste para los detalles
del proceso, pero este se resume en unos pocos pasos básicos:
• Configuración del servidor web (todos los ejemplos usan Pylons)
• Copiar el código fuente de la app en el servidor
• Agregar la URL Fuente apropiada a su app
• Crear las clases RemoteBizobj classes
• Definir la conexión a la base de datos para las clases de Remote
Bizobj
• Mover toda la lógica de negocio desde el código de su app a las clases
RemoteBizobj.
• Definir el mapeado a las clases RemoteBizobj en el controlador

Por ahora saltaremos el primer paso ya que tenemos un servidor configurado:


http://daboserver.com, así que después añadiremos este a la aplicación como
la SourceURL. A continuación, necesitamos copiar el codigo fuente en el
servidor. Una vez que esté allí todo el resto de las instrucciones suponen que
usted está operando en el servidor, no en su máquina local.
Abra el main.py de su aplicación, y añada la línea para asignar la SourceURL.
Mientras estamos alli, pasemos todo esto a la creación inicial de la aplicación. El
efecto es el mismo, es cuestión de preferencia personal.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import dabo
dabo.ui.loadUI("wx")
app = dabo.dApp(MainFormClass="hours.cdxml",
BasePrefKey="billing_tutorial",
SourceURL="http://daboserver.com")
app.start()

Ahora recuerde, aun cuando estamos editando código en el servidor, este código
será copiado a la máquina local del usuario por Springboard, y corrido allí. Esto
puede sonar un poco confuso, así que si esto ayuda, recuerde que nada en el
directorio fuente en el servidor es ejecutado en el servidor: sólo son archivos a ser
servidos.
A continuación, necesitamos crear el bizobj en el seridor para administrar las
peticiones del cliente. La aplicación Pylons daboserver maneja la capa HTTP real,
y llamará al controlador bizservers.py. Este controlador entonces mapeará la
DataSource de la petción a nuestra clase RemoteBizobj para su manejo;
crearemos la clase RemoteBizobj en el directorio controllers, así que las clases
estarán disponibles para el controlador bizservers. Explicaremos el mapeo dentro
de poco. Pero primero, examinemos este 'RemoteBizobj': ¿qué tanto es diferente?
Bien, comencemos mostrando el RemoteBizobj completo para la tabla hours:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import dabo

class HoursBizobj(dabo.biz.RemoteBizobj):
def defineConnection(self):
self.setConnectionParams(
dbType="MySQL",
host="dabodev.com",
database="pycon",
user="pycon",
plainTextPassword="atlanta")
def validateRecord(self):
"""Regresando nada más que una cadena vacía desde este
método evitará que los datos ean guardados.
"""
ret = ""
# Agregue sus reglas de negocio aqui.
If self.Record.clientfk == 0:
return "Usted debe seleccionar un cliente"
return ret

Aquí hay un par de cosas que deben ser tomadas en cuenta. Primero, heredamos
de dabo.biz.RemoteBizobj, y no de dabo.biz.dbizobj – esto nos proporciona
alguna inteligencia web adicional que no se encuentra en la clase bizobj regular.
También observe el método defineConnection: con bizobjs regulares, la
aplicación maneja las conexiones, y las pasa al bizobj cuando este es creado. Para
los bizobj remotos, tenemos que poner la información de la conexión en el bizobj,
así es como se ha hecho. Finalmente, tenemos el método validateRecord() que
simplemente copiamos de la versión local. Podemos borrar este código del código
local de la aplicación, dado que nunca será llamado; todas las validaciones
ocurrirán en el servidor.

Ahora todo lo que tenemos que hacer es definir el mapeado entre la DataSource y
los RemoteBizobjs. Para hacerlo, abra bizservers.py en el servidor en un editor
de texto, y desplácese hacia abajo hasta que vea la sección de comentarios
titulada 'START OF CUSTOMIZATION'.
#-------------------------------------------------------
# START OF CUSTOMIZATION
#-------------------------------------------------------
# Las dos secciones siguientes son sólo partes que tiene que editar
# para su aplicación. Asegúrese de específicar las clases bizobj que
# estará utilizando, y asegúrese de que ellas estén ubicadas en
# el mismo directorio 'controladores' de este archivo.
#-------------------------------------------------------
# Importe aquí las clases bizobj que se usarán en esta aplicación
# Luego asegúrese de vincularlas a sus DataSource en la definición
# 'bizDict' abajo.
## NOTA: la siguiente línea es un ejemplo tomado de la aplicación
# de demonstración.
## Asegúrese de CAMBIARLA a lo que se requiera para su app.
From PeopleBizobj import PeopleBizobj
from ActivitiesBizobj import ActivitiesBizobj
from HoursBizobj import HoursBizobj
#-------------------------------------------------------
# La clase bizobj *DEBE* ser definida aquí para cada fuente de datos que
# esté para ser manejada por el servidor. Esté seguro que estas clases.
# son importadas arriba
## NOTA: como se dijo arriba, esto es de la app demo.
dabo._bizDict = {
"people": PeopleBizobj,
"activities": ActivitiesBizobj
"hours": HoursBizobj}
# La ruta a la copia de los archivos fuente de la app en el servidor *DEBEN* ser
# definidas aquí. Esto se usa para comparar los manifiests en la app local para
# determinar que cambios, si alguno, han sido hechos a la app.
SourcePath = "/home/dabo/appSource"
#-------------------------------------------------------
# END OF CUSTOMIZIATION
#-------------------------------------------------------

Este código está copiado del servidor Springboard en daboserver.com, el cual ya


estaba configurado para administrar una app que usaba dos bizobjs;
'PeopleBizobj' y 'ActivitiesBizobj'. He añadido código en dos sitios: primero, he
agregado la instrucción import; recuerde que creamos el archivo HoursBizobj.py
en el directorio controllers del servidor web, así que este está disponible para su
importación aquí. Segundo, he agregado la clave 'hours' al atributo _bizDict del
controlador, y su valor es el RemoteBizobj para la tabla hours.

Espere un momento -¿de donde viene la DataSource 'hours'? Bien, este es parte
de la 'cola' construida dentro de los bizobj: cuado ellos estan dentro de una app
con su SourceURL asignada, ellos 'saben' como enviar peticiones sobre la web a
sus contraparte RemoteBizobj. Cada una de estas peticiones pasa la DataSource
del bizobj local como parte de la URL, y utiliza el mapeado de su _bizDict para
crear un ejemplar de la clase RemoteBizobj apropiada para administrar la
petición. Pero la real belleza de esto es que usted no necesita en realidad hacer
mucho para tomar una aplicación de escritorio instalada localmente y convertirla
en una aplicación que sea corrida por Springboard en la web.

(El resto de esta sección está incluido en la versión en línea de las notas del
tutorial).

También podría gustarte