Tutorial de [Link] 0.
3
Si conoces Python y quieres crear un sitio web. [Link] provee el cdigo para construirlo de manera fcil. Si deseas completar el tutorial, necesitas tener instalado Python, [Link], flup, psycopg2 y Postgres (o la base de datos y la librera de Python equivalente). Para mas detalles, vea [Link]. Si tienes un proyecto de [Link] existente, hecha un vistazo a la pgina upgrade para obtener informacin sobre la migracin.
Comencemos.
La parte ms importante de cualquier sitio web es la estructura URL. Las URLs no son solo eso que los visitantes ven y envan por correo a sus amistades, ellos tambin proveen un modelo mental de cmo nuestro sitio web trabaja. En sitios populares como [Link], las URL son siempre parte de las interfaces de usuario. [Link] facilita la creacin de URL grandes. Para iniciar con nuestra aplicacin [Link], abra un archivo de texto nuevo
(llammosle [Link]): import web
Con esto importamos el modulo [Link]. Ahora necesitamos decirle a [Link] cual es nuestra estructura URL. Vamos a iniciar con algo simple:
urls = ( /, index )
La primera parte es una expresin regular que machea la URL, como /, /help/faq, /tem/(\d+), etc. (o sea que \d+ debera machear con una secuencia de dgitos). Los parntesis capturan los datos que machearon para ser usados mas tarde. La segunda parte es el nombre de la clase a la que se enva la peticin, como index, view, [Link] (la clase hola del mdulo bienvenidos), o get_\1. \1 es remplazada por la primera captura de la expresin regular; cualquier captura encontrada es pasada a nuestra funcin. Esta lnea dice que queremos la URL / (o sea la primera pgina) para ser manipulada por la clase nombrada index.
Ahora necesitamos crear una aplicacin pasando como parmetro la variable urls.
app = [Link](urls, globals())
Dicindole a [Link] que cree una aplicacin con las URLs que escribimos anteriormente, buscando las clases en el espacio de nombre de ese fichero.
GET y POST: la diferencia
Ahora nosotros necesitamos escribir la clase index. Nuestro navegador usa un lenguaje conocido como HTTP para comunicarse con la internet. Los detalles no son importantes, pero la idea bsica es que las visitas realizadas en la Web preguntan al servidor sobre ciertas funciones (como GET o POST) en URLs (como / o /foo?f=1). El GET es con el que estamos todos familiarizado, el nico usado para pedir el texto de una pagina web. Cuando escribes [Link] dentro de tu navegador web, este literalmente pregunta al GET / del servidor web de la UCI (Universidad de Ciencias Informticas). POST, el segundo ms famoso, se usa a menudo cuando enviamos ciertos tipos de formularios, como una peticin para comprar algo. POST se usa cuando se quiere enviar un pedido para hacer algo (como pude ser recargar nuestra tarjeta de crdito y procesar una orden). Esto es importante, por que el GET puede ser pasado alrededor de las URLs e indexado por los motores de bsqueda, algo que definitivamente queremos para la mayora de nuestras pginas pero definitivamente no deseamos para cosas como el procesamiento de rdenes (imagina si Google tratara de comprar todo en tu sitio!). En nuestro cdigo [Link], hacemos una distincin clara entre los dos:
class index: def GET(self): return Hola, mundo!
La funcin GET ser llamada por [Link] en cualquier momento creando un pedido GET para /. Bien, ahora nosotros necesitamos terminar con una lnea final dicindole a [Link] que comience a servir las pginas web.
if __name__ == __main__:[Link]()
Dicindole a [Link] que sirva la aplicacin que creamos anteriormente. Ahora note que aunque he estado hablando mucho aqu, nosotros solo tenemos realmente cinco o ms lneas de cdigo. Eso es todo lo que necesitas para crear una aplicacin de [Link] completa.
Inicia el servidor
Si vas al intrprete de comando y tecleas:
$ python [Link] [Link]
Tendrs la aplicacin [Link] corriendo en un servidor web real en la computadora. Visita la URL y deberas ver lo siguiente Hola, mundo! (Puedes agregar tu propia direccin IP/puerto en el momento en que es lanzado el servidor [Link]. Tambin puedes decirle si correr un servidor fastcgi o scgi.) Nota: Si no quieres o no puedes usar el puerto que es activado por defecto Puedes especificar el puerto a usar con la siguiente lnea de comando:
$ python [Link] 1234
Plantillando
Escribir cdigo HTML dentro del cdigo de Python puede ser algo embarazoso; es mucho mas divertido escribir el cdigo Python dentro del HTML. Por suerte, [Link] lo hace de una manera bastante fcil. Nota: Las versiones viejas de [Link] usaban el sistema de plantillas Cheetah. Tu puedes, claro esta, usar este o cualquier otro software con [Link], pero este no esta oficialmente soportado. Vamos a crear un nuevo directorio para nuestras plantillas (nosotros lo llamaremos plantillas). Dentro, creamos un nuevo fichero de extensin HTML (que lo llamaremos [Link]). Ahora, puedes escribir dentro cdigo HTML:
<em>Hola</em>, mundo!
O puedes usar el lenguaje del sistema de plantillas de [Link] para agregar cdigo a nuestro HTML:
$def with (nombre) $if nombre: <em>Hola</em> a $nombre. $else: <em>Hola</em>, mundo!
Como puedes ver, el sistema de plantilla luce casi como un fichero Python, excepto por la sentencia def with (con la cual se llaman las variables de la plantilla) y el carcter $ que es colocado delante de cualquier variable y cdigo Python. En la actualidad las plantillas requieren que la sentencia $def sea la primera lnea del fichero. Note que en [Link] las variables usadas en las plantillas escapan de manera automtica, tambin que si por alguna razn cambia el valor de la variable nombre contenida en un HTML, este escapa apropiadamente y aparece en texto plano. Para evitar esto escribe $:nombre en vez de $nombre. Ahora regresa a [Link] y bajo la primera lnea agrega:
render = [Link](plantillas/)
Con esto le decimos a [Link] donde encontrar las plantillas de nuestra aplicacin. Ahora cambiemos [Link] (el mtodo GET de la clase index) a:
nombre = Kmilo return [Link](nombre)
(index es el nombre de la plantilla y nombre es el argumento que le pasamos a index) Visita el sitio en el navegador y debera decir Hola a Kmilo!. Digamos que queremos permitirles a las personas pasar su propio nombre. Remplaza las dos lneas agregadas arriba con:
i = [Link](nombre=None) return [Link]([Link])
Visita /, debera mostrar Hola mundo! Visita /?name=Kmilo y debera decir Hola a Kmilo. Por supuesto, tener ? en la URL es algo feo. Por lo que cambiemos nuestra URL a:
/(.*),index
Y cambia la definicin de [Link] a:
def GET(self, nombre): return [Link](nombre)
Ahora visitamos /Kmilo y este debera mostrar Hola a Kmilo. Si deseas aprender mas sobre las plantillas de [Link], visita la pgina referente a las plantillas.
Formularios
El modulo form de [Link] permite generar formularios html, permite la entrada de usuarios y la validacin de estos antes de ser procesados o agregados a la base de datos. Si quieres aprender mas sobre como usar el modulo form de [Link], ver la Documentacin o visita el link de la Librera Form.
Base de Datos
Nota: Antes de empezar a usar la base de datos, debemos asegurarnos de tener la librera de base de datos apropiada instalada. Para las base de datos MySQL, use MySQLdb para Postgres use psycopg2. Primero necesitas crear un objeto de base de datos.
db = [Link](dbn=postgres, user=usuario, pw=contrasea, db=nombrebd)
(Ajuste estos especialmente usuario, contrasea y nombrebd para su configuracin. Los usuarios de MySQL deben cambiar el parmetro de dbn a mysql.) Esto es todo lo que necesitas hacer [Link] manipula automticamente las conexiones y desconexiones de la base de datos. Usando la interfaz de administracin del motor de base de datos creamos una simple tabla en nuestra base de datos:
CREATE TABLE todo ( id serial primary key, titulo text, created timestamp default now(), done Boolean default f );
Y una fila:
INSERT INTO todo (titulo) VALUES (Aprenda [Link]);
Retornemos a [Link] y cambiemos [Link], remplazando la funcin entero:
def GET(self): todos = [Link](todo) return [Link](todos)
y cambiemos la URL a:
/, index,
Editando y remplazando el contenido entero de [Link] a:
$def with (todos) <ul> $for todo in todos: <li id=t$[Link]>$[Link]</li> </ul>
Visita de nuevo el sitio y deberas ver lo siguiente: Aprenda [Link]. Felicidades! Haz creado una aplicacin que lee de la base de datos. Ahora vamos tambin a escribir en la base de datos. Vamos a agregar a [Link] lo siguiente:
<form> <p><input type=text name=titulo /> <input type=submit value=agregar /></p> </form>
Y cambia la URL a:
/,index, /agregar,agregar
(Tienes que ser sumamente cuidadoso con las comas. Ya que si omites estas, Python agrega las cadenas juntas, algo como esto /index /agregaragregar) Ahora vamos a agregar otra clase:
class agregar: def POST(self): i = [Link]() n = [Link](todo, titulo=[Link]) raise [Link](/)
(Como hacemos uso del POST?) [Link] nos da acceso a cualquier variable enviada por el usuario a travs de un formulario. Nota: Para acceder a los datos de mltiples tems idnticamente nombrado, en una lista (ej.: una serie de checkbox todos con el atributo name=name) usa:
dato_post=[Link](nombre=[])
[Link] inserta valores dentro de la tabla de base de datos todo y obtienes el ID de la nueva fila. seeother redirecciona los usuarios a otra URL.
Nota adicional: [Link] trabaja justo como [Link] a excepcin de que este toma un ID en vez de retornarlo (o una clausula WHERE) luego el nombre de la tabla.
[Link], [Link], y otras funciones en [Link] retornan objetos Storage, que son como los diccionarios a excepcin de que puedes hacer [Link] en vez de d[foo]. Esto limpia un poco el cdigo.
Tu puedes buscar todos los detalles sobre las funciones [Link] en la documentacin. Desarrollando [Link] tiene algunas herramientas para ayudarte con el debugeo. Cuando corre con el built-in del servidor web, esta inicia la aplicacin en el modo debug. En este modo cualquier cambio en el cdigo y las plantillas son automticamente recargados y los mensajes de error muestran informacin til. El debug no est activado cuando la aplicacin corre en un servidor real. Si t quieres desactivar el modo debug, puedes agregar la siguiente lnea antes de crear tu aplicacin/plantillas:
[Link] = False
La gua termina por ahora. Eche una ojeada a la documentacin para obtener material ms fresco sobre lo que puedes hacer con [Link]. Que es lo siguiente? Mas documentacin
Formularios Plantillas Libro de cocina Ejemplos de cdigos