La pregunta es inmediata ¿para que tanto lio? ¿no es mejor hacer una aplicacion web y punto? y es que no toda la vida puedes depender de un Navegador, te limita al extremo, ejemplo controlar un biometrico, manejar una impresora financiera, manejar una impresora de alta velocidad, scannear y aplicar IRC sobre un formulario llenado a mano, etc pero todo conectado a Internet o al menos a tu Intranet, para eso hacemos tanto lio con las aplicaciones Internet standalone que se conectan consumiendo webservices para leer y escribir datos en un servidor.
Esta es una guia breve para probar la aplicacion de Webservices en ambiente Win32, estan basadas en informacion que encuentras en la documentacion de esos API's y bastante paciencia.
*** EN EL SERVIDOR ***
PYTHON
para el efecto puedes descargar e instalar Python de
http://www.python.org/download/releases/2.5.2/
para Win32 directamente descarga
http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi
DOCUMENTACION PYTHON
Documentacion sobre el lenguaje Python sus curvas y contra curvas la encuentras en:
Thinking in Python en el enlace http://www.mindview.net/Books/TIPython
Dive Into Python http://www.diveintopython.org/ te recomiendo el pdf en Ingles es el mas completo que el que esta en castellano.
POSTGRESQL
Vamos a suponer que descargaste e instalaste PosgreSQL con el usuario postgres.
Configura el pg_hba.conf comentando la siguiente linea:
#####host all all 127.0.0.1/32 md5
y adicionando:
host all all 127.0.0.1/32 trust
si esto no va con tus politicas de seguridad configuralo de la manera que te sea mas optima.
Luego crea una base de datos con el nombre "mibase".
Con ayuda de psql crea la siguiente tabla
create table ctc_contactos (
id_contacto integer primary key not null,
nombres text,
paterno text,
materno text
);
Adiciona unos cuantos registros por ejemplo:
insert into ctc_contactos values ('1', 'DALI ALEXANDER', 'APARICIO', 'TORREZ');
insert into ctc_contactos values ('2', 'RENE PASTOR', 'MAMANI', 'FLORES');
[PyGreSQL]
Para conectar tu programa Python con PostgreSQL lo haremos con el API PyGreSQL, los paquetes para Win32 los encuentran en:
ftp://ftp.pygresql.org/pub/distrib/PyGreSQL-3.8.1.win32-py2.4.
Su instalacion es bastante sencilla solo se debe correr el ejecutable.
Esta API tiene dos interfaces una la denominada "DB-API 2.0 compliant interface" provista por el modulo pgdb aqui en este enlace hay una breve referencia http://www.linuxjournal.com/article/2605 para el ejemplo utilizaremos el "classic PyGreSQL interface" provista por el modulo pg del cual podran ubicar una guia de referencia en http://www.pygresql.org/pg.html
Para ver que todo esta ok desde el menu de inicio correr "Python (command line)" o lo que es lo mismo el c:python25python.exe efectuamos una prueba ejecutando el siguiente codigo:
>>> import _pg
>>> db = _pg.connect(dbname='mibase', host='localhost', user='postgres')
>>> db.query("SELECT * FROM ctc_contactos")
id_contacto|nombres |paterno |materno
-----------+--------------+--------+-------
1 |DALI ALEXANDER|APARICIO|TORREZ
2 |RENE PASTOR |MAMANI |FLORES
(2 rows)
Con todo esto sabemos que el Python con ayuda del PyGreSQL conecta con PostgreSQL en nuestro servidor.
WEBSERVICE
Son necesarios instalar primero el paquete PyXML http://pyxml.sourceforge.net/ y lo compilaremos ejecutando:
setup.py build -c mingw32 install
como veran utiliza MinGW32 para compilar el paquete PyXML, si no tubieran MinGW32 lo pueden bajar de http://www.mingw.org/
Lo mismo con FPConst lo pueden bajar de http://pypi.python.org/pypi/fpconst el cual pueden compilar e instalar ejecutando:
setup.py build
setup.py install
Ahora si instalaremos la libreria SOAPpy la cual debemos bajarla de:
http://pywebsvcs.sourceforge.net/
Yo intente con varias versiones y me daban errores al compilar la libreria __future__, al final me quede con la SOAPpy-0.11.1.zip aqui dejo el enlace http://downloads.sourceforge.net/pywebsvcs/SOAPpy-0.11.1.zip?modtime=107
Para compilarla lo mismo
setup.py build
setup.py install
--- servidor.py ---
import _pg
import SOAPpy
def hola():
return "Hola, Mundo"
def listarcontactos():
db = _pg.connect(dbname='mibase',host='localhost',user='postgres')
contactos = db.query("SELECT * FROM ctc_contactos").dictresult()
print contactos
return contactos
def adios(nombre):
return "Adios " + nombre + "!!!"
print
print "Servidor funcionando ..."
print "========================"
print
# no olviden verificar que el puerto este libre
# sino muevanlo al 8081 o 8082
server = SOAPpy.SOAPServer(("localhost", 8080))
#aqui se registra los 3 metodos
server.registerFunction(hola)
server.registerFunction(listarcontactos)
server.registerFunction(adios)
try:
server.serve_forever()
except KeyboardInterrupt:
pass
*** EN EL CLIENTE ***
En el cliente solo deben instalar el Python, PyXML, FPConst y el SOAPpy
--- cliente.py ---
import SOAPpy
print
print "CLIENTE WEBSERVICE"
print "=================="
try:
server = SOAPpy.SOAPProxy("http://localhost:8080/")
print
print server.hola()
contactos = server.listarcontactos()
for t in range(len(contactos)):
print contactos[t]["nombres"] + "t" + contactos[t]["paterno"] + "t" + contactos[t]["materno"]
print server.adios("muchachos")
print
except:
print
print "No hay conexion o la direccion no existe."
print
CORRIENDO
Primero ejecuten el servidor.py y luego ejecuten el cliente.py
Esto no quiere decir de ningna forma que el servidor y/o el cliente deben estar escritos en Python, por el contrario abre la posibilidad de crear servidores y clientes en cualquier otro lenguaje y plataforma y consumir datos a traves de la web, dejamos en el tintero algunos importantes detalles de seguridad que considerar pero ello para estas pruebas no es indispensable.
CONCLUSIONES
Los caperuzos de GNU/Linux estoy seguro le meteran sin problemas, pero mas ganas le hecho a los win2ceros que quieren probar una plataforma ligera que disponibiliza y consume webservices en Python sobre Win32.
Deben faltar alguno que otro detalle, espero pulirlo y con suerte tratar de aplicar el articulo a la revista ATIX :) si hay dudas o inconvenientes solo escriban, probe cada paso a mano :D quiza se haya escapado uno que otro detalle en la transcripcion pero verifique que cada paquete y API sea el adecuado para llevarlo a ambiente de pruebas sin perder el tiempo.
Desestime algunas versiones de algunos paquetes para evitar las idas y vueltas, pero sientanse en la libertad de probar otros caminos, espero lo disfruten yo lo hice y bastante :)
Palabras clave: PyGreSQL, Python, PyXML, SOAPpy, Webservices