En este tutorial, que consta de dos partes, voy a dar una pequeña introducción a juno, un miniframework web creado en python que nos va a permitir hacer pequeñas aplicaciones web de forma muy simple y rápida. En esta primera parte comentaré qué es python, qué es un miniframework, que es juno, en la segunda parte presentaré una aplicación de ejemplo que explicaré paso a paso.

Autor:

Pythonista de corazón, programa en cualquier cosa que se mueva, puedes seguirle en twitter o conocer un poco más acerca de javier santana.
Descarga Demostración

Este tutorial forma parte de una serie

Una pequeña introducción: python

El objectivo de este tutorial no es enseñar python, pero si daré una pequeña introducción y algunos enlaces para empezar de forma sencilla. Python es un lenguaje de programación, que aparte de todo lo que cuenta la wikipedia, nos permite hacer las cosas muy mucha rapidez.

¿Y por qué?, hay varias razones, entre ellas la gran cantidad de librerías que hay a nuestra disposición (y su facilidad de uso), las facilidades que da el lenguaje para manejar estructuras de datos y otros útiles muy comunes. Podría escribir mucho acerca de esto, pero lo mejor es que os paseis un rato jugando con la consola.

La instalación es muy simple, en windows basta con bajar el instalable e instalar al método tradicional, en linux, depende del sabor, si estás usando una basada en debian, por ejemplo ubuntu, con un:

$ apt-get install python2.6

Para empezar a trabajar se puede arrancar una consola interactiva ejecutando “python” en la línea de comandos o creando un fichero “.py”:

texto = "soy javisantana y me gusta python"
print "hola, %s" % texto

Lo guardamos y en la línea de comandos ejecutamos: python fichero.py Así de simple. recomiendo la lectura del manual de python que viene con la instalación o la infinidad de manuales que hay escritos en la red.

Miniframeworks

Te sonarán posiblemente las palabras spring, structs, ruby on rails, CakePHP, Symfony, django, etc, etc no son más que frameworks que permiten agilizar (bueno, en algunos casos) el desarrollo web. Hace una separación clara de modelo-vista-controlador, dan recursos para acceder a los modelos, la creación de los templates, sesiones, autentificación, formularios y en general todo lo necesario para construir una aplicación web de hoy en día.

Los frameworks nos permiten agilizar el desarrollo, organizados en la mayoría de los casos bajo el patrón Modelo-Vista-Controlador, proporcionando las bases para optimizar al máximo el tiempo de desarrollo.

Aparte de estos, hay otros, catalogados (realmente no sé si están catalogados, pero yo lo hago :) , como mini frameworks, esto es, dan funcionalidad recortada con respecto a los anteriores a cambio de simplicidad y claridad. Ejemplo de esto es sinatra para ruby y juno en python. Hay muchos más, no hay más que dar una vuelta por github.

Juno

Para empezar, el típico “hola mundo”:

from juno import *

@route('/')
def index(web):
    return 'hola!'

run()

Si guardais esto en un fichero y lo ejecutais tendreis un bonito servidor web corriendo. Basta con ir a http://127.0.0.1:8000/ para ver un “hola!”, poco útil, pero lo suficiente para mostrar lo simple que puede ser hacer un pequeño servicio web.

Instalación

La instalación no puede ser más simple:

$ easy_install SQLAlchemy
$ easy_install jinja2
$ easy_install juno

easy_install es una de las formas que tiene python para instalar librerías de terceros. La forma de trabajo es similar a apt-get, le indicas el nombre de la librería o paquete, lo busca en internet, lo baja e instala. Para instalar easy_install basta con ir a su web. Descarga directa para windows, en linux “apt-get install python-setuptools”.

Uso básico

El ejemplo anterior era muy simple, vamos a empezar a complicar la cosa. Pongamos que queremos saludos personalizados (para ser originales :P ).

@route('/:nombre/')
def hola(web, nombre):
    return 'Hola, %s' % nombre

run()

Bien, ahora si apuntamos a http://127.0.0.1:8000/javi mi navegador me mostrará un amable “Hola, javi”.

Pero la realidad que es realmente feo, sería más interesante poder poner html, css, javascript… no hay problema. Creamos una carpeta llamada “templates” y en ella ponemos nuestra web:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>juno</title>
</head>
<body>
   <h1> Hola, {{nombre}} </h1>
</body>
</html>

Y el nuevo código en el fichero.py

from juno import *

@route('/:nombre/')
def hola(web, nombre):
  template('index.html', nombre=nombre)

run()

Bien, ya sabemos usar plantillas y enrutar peticiones, solo falta otra cosa que suelen tener las aplicaciones web: la base de datos, el lugar donde almacenar los datos de la aplicación. Supongamos que queremos almacenar todas las personas que saludan.

Primero configuramos la base de datos… tranquilos, aquí no hay miles de xmls, no hay pesados mapeos, sólamente le decimos donde está nuestra base de datos y lo que queremos guardar:

init({'db_location': 'amigos.db'}) # usamos sqlite, el fichero será amigos.db 
                                            # también podríamos usar mysql, postgre

Amigos = model('Amigos', nombre='string') # esto definirá una tabla llamadas Amigos con una columna llamada nombre

Esto es todo, no hay que ir a la base de datos a crear las tablas, python las crea por ti.

El código de la aplicación quedaría así:

@route('/:nombre/')
def hola(web, nombre):
  #salvamos el nuevo amigo
  Amigos(nombre=nombre).save() # similar a un insert ...
  amigos = find(Amigos).all() # similar a un select * from Amigos
  template('index.html', nombre=nombre, amigos=amigos)

y el template tal que así:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>juno</title>
</head>
<body>
   <h1> Hola, {{nombre}} </h1>
   <h2>Otras personas que han visitado la web:</h2>
   <ul>
     {% for amigo in amigos %}
     <li>{{amigo.nombre}}</li>
     {% endfor %}
   </ul>
</body>
</html>

Reflexión final de esta primera parte

En la siguiente entrada haremos una aplicación un poco más complicada donde se pueda ver en un caso real como funciona juno. De momento podeis leer la documentación de juno o ir jugando con la consola python.

¿Necesitas desarrollar un proyecto web o para móviles? ¡Estamos disponibles!

Visitar Cokidoo

Cokidoo, los creadores de Ontuts, desarrollamos proyectos tecnológicos centrados en redes sociales y aplicaciones web, aplicaciones móviles y consultoría web y bases de datos.

Somos jóvenes, inquietos, versátiles, apasionados por la innovación y enfocados en las nuevas tecnologías. Con Ontuts tratamos de compartir nuestro conocimiento adquirido en los distintos proyectos, ayudando a la comunidad y mostrando nuestra capacidad tecnológica.

Si necesitas un presupuesto sin compromiso, estamos disponibles, no dudes en contactar con nosotros.

Comentarios en esta publicación (8 comentarios)

¿Te ha gustado esta publicación? ¡Puedes compartir tu opinión con todos nosotros! Simplemente pincha aquí mismo.

Muy bueno Javi! Estaba deseando ver el tutorial, a pesar de ser sencillo se ve que python apunta maneras… al final tendré que mirármelo y todo :)

Realmente interesante! Menos en lo que respecta a la parte del modelo, el resto me recuerda mucho al mini framework usado en Erasmusu. Nunca me ha gustado que un script genere las tablas por ti :)

Yo creo que lo lógico para estos frameworks es usa algo menos restrictivo que una BBDD sql, algo tipo key-value (redis, tokyo cabinet) o similar estaría más interesante.

@ivan por qué no te gusta que te genere las tablas?

@javisantana en un proyecto pequeño puede ser, pero en uno como el nuestro…prefiero llevar yo la estructura de la BD

Muy interesante, uso Python de vez en cuando para programar pequeñas herramientas de linea de comando pero no sabía cómo empezar a usarlo en la web… y todo eso de Django y el resto de super frameworks se me hacía muy cuesta arriba.

¡Esperando el siguiente tuto de Python!

diego torres

exelente esos datos, son muy importantes para los que estamos empezando a trabajar web.
congratulations.

Gipsy

Yo creo que no hay que tenerle miedo a que genere las tablas. hoy en dia es lo mas tipico con hibernate por ejemplo, la idea es abstraerse.

ajgutierrez

Hola javi soy nuevo en python me encanto al empesarlo usar en consola pero al ver tu tutorial da mas posibilidades.

Fijate que instale el juno con sus librerias tal como especificas aquí pero coloco 127.00.0.1:8000 y no da nada :$ también realize el primer ejemplo que colocas en este post pero no supe donde guardarlo. o se debería de guardar en el path de python?

Saludos y de antemano muchas gracias.