TutorialDaboParte 4
TutorialDaboParte 4
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.
#!/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
#-------------------------------------------------------
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).