Desarrollo web con Python y Web.py – parte 2

Plantillas en web.py

web.py permite que desde dentro de los ficheros de HTML podamos embeber código python al estilo de otros lenguajes de escript como php. Para usar plantillas en nuestros proyectos podemos hacer un directorio para almacenarlas.

$ mkdir templates
$ cd templates/

Dentro de nuestro directorio de plantillas vamos a crear nuestro fichero html, llamado index.html, en el cual podemos escribir etiquetas html y usar el lenguaje de plantillas de web.py.
Para nuestro ejemplo “Hola Mundo”. index.html:

 1 $def with (nombre)
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 4   <head>
 5     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 6     <meta name="author" content="Jorge Alonso Toro" />
 7     <meta name="generator" content="web.py" />
 8     <title>Hola Mundo</title>
 9     <style type="text/css">
 10      
 11       p {
 12         font-style: italic;
 13         font-family: arial;
 14         color: gray;
 15         margin: .8em;
 16       }
 17
 18       span {
 19         font-weight: bold;
 20         font-style: normal;
 21       }
 22
 23       #msg {
 24         -moz-border-radius: 5px 5px 5px 5px;
 25         background-color: #f4f4ff;
 26         border: 1px solid #AACCEE;
 27         width: 20em;
 28       }
 29       #sld {
 30         -moz-border-radius: 3px 3px 3px 3px;
 31         background-color: #f4f4ff;
 32         border: 1px solid #AACCEE;
 33         width: 20em;
 34       }
 35     
 36     </style>
 37   </head>
 38   <body>
 39   $if nombre:
 40     <div id="msg">
 41       <p>Solo quer&iacute;a decirte hola<span> $nombre</span></p>
 42     </div>
 43   $else:
 44     <div id="sld">
 45       <p>Hola, <span>Mundo</span></p>
 46     </div>
 47   </body>
 48 </html>

Nota: Hay que tener mucho cuidado con la indentación, tanto del código python como las etiquetas html. Actualmente son requeridos 4 espacios. En vim lo podés establecer con ‘set tabstop’ yo lo tengo en 2.

En este tuto no profundizaremos en el diseño web con (x)html y css pero veremos algunas etiquetas y estilos básicos.

Como podemos notar el lenguaje de plantillas de web.py se asemeja mucho al lenguaje nativo de python a diferencia de la primera línea la cual contiene los datos pasados a la plantilla cuando ésta es llamada ($def with(name)) y el signo peso ($) colocado delante de cualquier código.

Volvemos a nuestro hola.py y debajo del import, agregamos:

 7 # Directorio de plantillas:
 8 render = web.template.render('templates/')
 9

Esto le indica a web.py donde debe buscar las plantillas. Reemplazamos el contenido de nuestra función GET a:

 21 # Clase index:
 22 class index:
 23   def GET(self):
 24     nombre = 'Linux'
 25     return render.index(nombre)

En la línea 25 index es el nombre de la plantilla y ‘nombre’ es el argumento pasado a esta plantilla. Corramos nuestro script y visitemos nuestro sitio http://localhost:8080/:

$ python hola.py
0.35
http://0.0.0.0:8080/

Muy bonito pero para nada funcional, algo más funcional puede ser, que la gente pueda ingresar su nombre!. Reemplacemos las líneas 24 y 25.

 21 # Clase index:
 22 class index:
 23   def GET(self):
 24     i = web.input(nombre=None)
 25     return render.index(i.nombre)

Corremos nuestro script, si nos dirigimos a http://localhost:8080/ debemos ver el saludo “Hola, Mundo”, pero si visitamos http://localhost:8080/?nombre=gente debemos ver el saludo “Solo quería decirte hola gente”.

Por supuesto que tener un ‘?’ en nuestra URL es un poco feo. En su lugar podemos cambiar nuestras línea de direcciones (urls).

 12 # URL:
 13 urls = (
 14   # 'regex para url', 'clase donde se envía la petición'
 15   '/(.*)', 'index'
 16 )

Y cambiar la definición de nuestra función GET:

 21 # Clase index:
 22 class index:
 23   def GET(self, nombre):
 24     return render.index(nombre)

Con esto le pasamos como argumento a nuestra función GET, lo enviado por el método GET de HTTP. Corremos nuestro script y si visitamos  http://localhost:8080/gente obtenemo el mensaje “Solo quería decirte hola gente”.

By: jolth

Anuncios

2 pensamientos en “Desarrollo web con Python y Web.py – parte 2

  1. estoy siguiendo por primera vez el mundo python y tengo una duda?
    es lo suficientemente robusto el desarrollo con webpy como para hacer una aplicacion que tenga mas de 50 usduarios simultaneos y algo pensada en insert y consultas a la base de datos?

    • Hola Hector, tiempo sin estar por acá, claro python es muy escalable, yo tengo varios proyecto en producción con python. Lo ideal de python es que su stock de paquetes es ideal para cualquier proyecto.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s