Desarrollo Web.
Chema Cortes
py en ch3m4.org
Lun Mar 29 16:53:01 CEST 2004
Pedro Baldanta escribió:
> Ahora lo que me interesaría es que me informen del
> modelo a seguir para realizar la aplicación en python.
Antes de empezar, aclararte que python cuenta con una gran librería
estándar suficiente para realizar aplicaciones web tanto en cliente como
servidor, tanto para hacer páginas webs como servicios web. Según cuál
sea tu idea, es posible combinar python con otros servidores web como
apache, ó integrarse con un sistema java (si necesitas java, puedes
echar un vistazo a jython (www.jython.org) como una implementación de
python para JVM).
En fin, que las alternativas son muchas y variadas.
> Tengo claro que quiero separar la lógica del negocio
> de la lógica de la presentación. He oido una serie de
> terminos que pueden ser interesantes y me gustaría que
> me explicasen someramente su uso:
>
> Webware
> mod_python vs CGI
> cheetah
Uffff. Si empezamos con explicaciones "someras" no acabaríamos nunca. Lo
mejor es que vayas a la colección de referencias más completa:
http://www.python.org/cgi-bin/moinmoin/WebProgramming
Ya te han hablado de webware y cheetah. Del "mod_python" decirte que,
por sí mismo, no es nada intuitivo y que no está preparado para separar
la lógica de la presentación. Lo mejor es utilizarlo para procesar
plantillas como hace el PyHP (python empotrado en html al estilo PHP) ó
el Jotweb (plantillas ZPT estilo zope).
CGI es una buena alternativa, y no tan lenta como siempre se dice.
Depende de qué sistema operativo y servidor web emplees. Para apache
puedes utilizar fastcgi (ó algún tipo de permanentCGI) que acelera
bastante la ejecución del CGI a costa de emplear más recursos de la
máquina. Hay algunos sistemas CGI que separan lógica y presentación como
"slither" (www.slither.info) del que puedes encontrar un libro bastante
bueno ("Web programming in Python").
Aunque es dificil recomendarte un sistema, el zope es casi una
obligación, sobre todo ahora que acaba de salir la versión zope2.7
bastante mejorada en rendimiento, y con gran soporte por parte de la
comunidad (incluso en español). Es un sistema complemente orientado a
objeto, con su propio sistema gestor, una sólida base de datos
jerárquica, una colección enorme de productos utilizables, y que puede
usarse tanto para construir aplicaciones web como servicios web
(xmlrpc). Su sistema de plantillas (ZPT) cumple con los estándares xml,
y facilita mucho la separación de lógica de presentación.
Si quieres de momento algo más sencillo para iniciarte, te recomiendo
que eches un vistazo a CherryPy (www.cherrypy.org). Es fácil de hacerse
con él, y posee una de las mejores introducciones a la programación de
aplicaciones web en python que puedes encontrar. Está orientado a
objetos, permite una separación de lógica y presentación, y tiene
algunas características que no se encuentran fácilmente en otros
sistemas. Y lo sorprendente es que el resultado final es tan
trasportable como un único fichero python que puede ejecutarse sin más
en cualquier sistema (incluso desde jython).
Tampoco te olvides de echar un vistazo al "twisted"
(http://www.twistedmatrix.com)
> ¿Qué base de datos tiene buen enlace con Python?
Todas, aunque para ser justos habría que destacar postgres por permitir
almacenar procedimientos escritos en python. Se puede decir que tienes
asegurada la conectividad con cualquier base de datos que soporte ODBC ó
JDBC.
La elección de una base de datos no es un tema demasiado preocupante en
python ya que su uso está unificado a través de la llamada DB-API
(actualmente, en versión 2), siendo muy fácil pasar de una base de datos
a otra.
Zope incluye sus propios conectores a bases de datos que quedan
integrados dentro del esquema general de seguridad del servidor.
Como anecdótico, hay que decir que python incluye ya de serie la
BerkeleyDB4, aunque no es relacional. También que existe una base de
datos, 'gadfly', que está completamente implementada en python.
> ¿Sistema de plantillas?
ZPT (zope), y CHTL/CGTL (cherrypy)
Más información sobre la lista de distribución Python-es