Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Look up keyword
Like this
5Activity
0 of .
Results for:
No results containing your search query
P. 1
Wiki Python

Wiki Python

Ratings: (0)|Views: 152 |Likes:
Published by Aprender Libre
Ward Cunningham fue el pionero en el mundo de los WikiWikis. Su WikiWiki es el más antiguo del mundo:
Cunningham \& Cunningham, Inc.. Lo puedes encontrar en http://c2.com. Ya que estamos, consulta el
wiki más famoso de la actualidad y podrás obtener datos suyos: http://en.wikipedia.org/wiki/
Ward\_Cunningham.
Ward Cunningham fue el pionero en el mundo de los WikiWikis. Su WikiWiki es el más antiguo del mundo:
Cunningham \& Cunningham, Inc.. Lo puedes encontrar en http://c2.com. Ya que estamos, consulta el
wiki más famoso de la actualidad y podrás obtener datos suyos: http://en.wikipedia.org/wiki/
Ward\_Cunningham.

More info:

Published by: Aprender Libre on Jun 30, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/19/2014

pdf

text

original

 
Los wikis están de moda y son unas de las mejores demostraciones de la web,¡y ni siquiera son complicados de programar!
WIKI WIKI…¿PYTHON?
Ward Cunningham fue el pionero en el mundo de los WikiWikis. Su WikiWiki es el más antiguo del mundo:
Cunningham \& Cunningham, Inc.
. Lo puedes encontrar en
http://c2.com
. Ya que estamos, consulta elwiki más famoso de la actualidad y podrás obtener datos suyos:
http://en.wikipedia.org/wiki/ Ward\_Cunningham
.
POR JOSÉ PEDRO ORANTES Y JOSÉ MARÍA RUÍZ
A
hora entremos en
c2.com
y eché-mosle un vistazo… ¿ya lo hasvisto? Entonces te habrás perca-tado de lo simple que es. Fue creadopensando en la simplicidad de formas,para que fuese una herramienta más queun escaparate. El objetivo es que las per-sonas que los visitasen fueran dejandopequeños trozos de información, demanera que el sistema creciese solo.
c2.com
también es muy simple encuanto a programación y en este númeroreplicaremos gran parte del mismo conun programa en Python que no llega alas
¡¡200 líneas!!
De nuevo Python nosdemuestra su potencia.
Nuestro propio WikiWiki
Vamos a crear nuestro propio WikiWikien Python. No es una tarea tan compli-cada como pudiera parecer. La recetapara nuestro WikiWiki es:
01 Mucho CGI02 Un poco de Expresiones
Regulares03 Algo de Manipulación de
ficheros04 Un Servidor Web al antojo del
lector que permita CGI
(casi todos lo hacen)
Con estos ingredientes vamos a progra-mar un wiki hecho y derecho, quepodremos ampliar a nuestro antojo.
NOTA:
Para poder seguir el resto delartículo, convendría tener a mano el lis-tado completo del programa
wiki.py
, quese puede descargar de [5].
Cómo funciona un WikiWiki
Este es el primera paso en el ataque decualquier programa: saber exactamentelo que queremos. Vamos a seguir lasreglas de
c2.com
. El wiki se compondráde páginas enlazadas entre sí. Los enla-ces estarán representados por palabrasclave que tienen una forma especial:estarán formadas por 2 o más palabrasjuntas (sin espacios o separadores) cadauna de las cuales comenzará en mayús-cula. Esto puede parecer confuso, asíque vamos a ver algunos ejemplo.Comencemos con los erróneos, lassiguientes NO son palabras clave:
HolaUna CosaOtra-CosasoftwareLibre3cerditos
Ninguna de ellas corresponde con nues-tro patrón. Ahora vamos a ver unascuantas que sí lo hacen:
HolaMundoUnDosTresLinuxMagazineFreeBsdWikiWiki (ya os podeis imaginar
porqué se llaman WikiWiki y no
Wiki, no serviría como palabra
clave ;) )
Ahora que hemos visto las palabrasclave vamos a ver como se utilizan. Laverdad es que no tiene mucho que expli-car, simplemente las pones, es decir:
 Estoes un texto de un WikiWiki para LinuxMagazine
.En este ejemplo tanto
WikiWiki
como
 LinuxMagazine
se convertirían automá-ticamente en palabras clave.Las páginas de wiki serán editables,de manera que cualquiera podrá pulsarel botón “Editar” y cambiar, borrar o
Python •
DESARROLLO
67
Número 08
WWW.LINUX
-
MAGAZINE.ES
67
 
¿no?
 POST 
es distinto, el navegador y elservidor se pasan información usando elprotocolo
 HTTP 
, de manera que no vere-mos pasar las variablesA efectos de nuestro programa, no nosimporta usar
GET 
o
 POST 
, lo que nosinteresa es el concepto de
CGI 
. Nuestroprograma recogerá variables y generarálas páginas dependiendo de ellasPara ello usaremos el módulo
cgi
dePython:
import cgi
Éste módulo nos permite recoger lasvariables que nos pasa el servidor web.Para ello tenemos que usar la función
cgi.FieldStorage()
. Esta función nosdevuelve un diccionario de objetos deltipo
 FieldStorage
. Cada uno de ellos con-tiene la información de una de las varia-bles. De toda esa información solo nosinteresará el valor de la misma, que esaccesible haciendo lo siguiente:
variables = cgi.
FieldStorage()valor = variables["nombre"].
value
Así podremos obtener el valor de lavariable. Al ser un diccionario lo quedevuelve, podremos preguntar si estápresenta alguna variable en particularusando el método
has\_key()
:
varia-bles.has\_key("nombre")
Formularios HTML
Parte vital del
WikiWiki
es el poder edi-tar el contenido de las páginas. Para elloHTML dispone de los formularios, quenos permiten recoger información yenviarla al servidor web.Los formularioss HTML se componende muchos controles como por ejemplobotones, campos de texto, etiquetas ocasilleros. Se diseñaron para ser lo másparecidos posible a auténticos formula-rios burocráticos.Nuestra necesidad se cubre con un for-mulario que incorpore un “área de texto”y un botón para guardar el texto editado.Vamos a ver lo básico.Un formulario HTML está encerradoentre dos etiquetas
<form>
y
</form>
. La primera de ellas lleva unaserie de datos que definen el comporta-miento del formulario. Nosotros quere-mos poder controlar el método de envío
(POST o GET)
y el programa que recibirálos datos
(wiki.py)
.
<form method="POST"
action="wiki.py">...</form>
Dentro del formulario se definen loscontroles que mostrará. Cada uno deellos, a su vez, define una serie deparámetros. El primero de ellos será un
textarea
.
...<textarea cols="55" rows="10"
name="texto"></textarea>...
cols
indica el número de columnas (deun carácter de ancho) y
rows
el númerode filas. El parámetro
name
define elnombre con el que el contenido del
tex-tarea
será enviado al servidor web,hemos escogido el poco original nombrede
texto
.El segundo tipo de control que necesi-taremos es
input 
:
...<input type="submit" value=
"Editar"> </input><input type="hidden" name=
"editar" value="algo"> </input>...
Aquí vemos los dos tipos que necesita-mos. El parámetro
type
se usa para espe-cificar el tipo, pues existen varios dife-rentes. En nuestro caso tenemos:
submit 
, que genera un botón cuyo títu-lo se recoge del parámetro
value
. Estebotón, al ser pulsado, envía los datos laservidor. Y
hidden
, que se usa para pasaral servidor datos no relacionados concontroles. En nuestro caso pasamos lavariable
editar=algo
.añadir texto a la página. Dentro de esteproceso puede introducir palabras claveque no estén presentes en el WikiWiki.De esta manera se crean nuevas pági-nas.El texto que editaremos estará en for-mato HTML, de esta manera podremosintroducir formateo, como por ejemplolistas o negritas.Una vez editada la páginas podremosguardarla, y a partir de entonces estarádisponible la versión modificada. En teo-ría no debería ser posible eliminar pági-nas, el objetivo del WikiWiki es acumu-lar información. Como la única manerade crear nuevas páginas es añadir pala-bras clave a páginas ya existentes nosaseguramos de que cualquier página seaaccesible desde otra. No tendremos pági-nas sueltas.
CGI
El “Common Gateway Interface” es unprotocolo que permite a un servidor webenviar información y recibirla desde unprograma exterior. Básicamente el servi-dor web delega la generación de las pági-nas en programas externos que obtienensus parámetros de éste.Estos parámetros pueden ser enviadosde dos maneras o métodos distintos:“GET” y “POST”. Es la manera que tieneel navegador de intercambiar informa-ción con el servidor web remoto. “GET”simplemente pasa los parámetros a tra-vés de la “URL” que el navegador pasa alservidor. Lo podemos ver cuando visita-mos muchas páginas, la url tiene un for-mato parecido a
http://www.algunaweb.org/algo.algo? variable1=valor1\&varia-ble2=valor 
Lo que está ocurriendo es que el nave-gador le está pasando 2 variables al servi-dor
( “variable1” y “variable2”)
. La URLusa el símbolo
para separar la ruta de lasvariables y el símbolo
\&
para separarvariables entre sí. No es muy complicado
DESARROLLO
Python
68
Número 08
WWW.LINUX
-
MAGAZINE.ES
Figura 1: El padre de todos los wikis de WardCunningham.Figura 2: Nuestro formulario de edición delPython Wiki.
 
Python •
DESARROLLO
69
Número 08
WWW.LINUX
-
MAGAZINE.ES
arla. Para ello solo tenemos que pincharsobre las
, rellenar el
textarea
y pulsaren
 guardar 
(al igual que antes).Luego podemos tendremos que con-trolar 4 estados:Que no vengan variables, gene-ramos la web de bienvenidaQue venga la variable
 pagina
, ycargaremos la página corres-pondienteQue venga la variable editar,y cargaremos en modo de edi-ción la página indicadaQue vengan las variables guar-dar” y “texto”, y procederemosa guardar el texto que nosenvían
Análisis del Texto
Para localizar las palabras clave emplea-remos “Expresiones Regulares”. Ya sevieron en un número anterior. Lo impor-tante ahora es localizar la expresiónregular que encaja con una palabraclave. Ya vimos que están compuestaspor 2 o más palabras, cada una de lascuales con la primera letra en mayúscu-la.Para indicar que queremos una pala-bra con la primera letra en mayúscula yal menos 2 letras usamos la expresiónregular:
[A-Z][a-z]+
. Si queremos indi-car que son dos palabras usaremos
[A-Z][a-z]+[A-Z][a-z]+
. Pueden sermás, así que metemos la segundaparte en unos
()
y le adosamos un
+
para indicar que por lo menos hayuna. Ya tenemos nuestra expresiónregular:
[A-Z][a-z]+[A-Z][a-z]+[A-Za-z]*
Ahora que ya podemos localizar laspalabras clave, vamos a sustituirlasen el texto por hiperenlaces asus respectivas páginas. Paraello compilaremos la expre-sión regular y sacaremosuna lista de ellas. Parahacerlo usamos el método
findall()
, que nos devolveráuna lista con todas lascadenas que se ajusten alpatrón. Pero tendremos unproblema: algunas de lascadenas estarán duplicadas.¿Cómo limpiamos una lista dePython de componentes duplica-dos? Se puede hacer de muchasmaneras, (alguien en Internet lo hahecho así:
reduce(lambda l, x: x not in land l.append(x) or l, a, [])
siendo
a
lacadena, pero explicar esta simple líneanos llevaría un artículo entero). Lo quepodemos hacer es emplear un poco dematemáticas. Python nos permite gene-rar un conjunto desde una lista. Un con-junto puede contener diversos elemen-tos, pero no importa su cantidad solo siestán presentes. Veámoslo de una mane-ra sencilla. Supongamos que tenemos lalista:
[1,1,1,3,4,5,5,6]
y que generamosun conjunto usando la función
set([1,1,1,3,4,5,5,6])
. El resultado será elconjunto
{1,3,4,5,6}
. Python nos permi-te iterar sobre un conjunto, extrayendoun elemento distinto cada vez. Esto nospermite realizar el siguiente truco:
01 > > > l i s t a =[1,1,1,3,4,5,5,6]02 >>> conj = set(lista)03 >>> for elemento in conj:04 ... print "Elemento: ",elemento05 ...06 Elemento: 107 Elemento: 308 Elemento: 409 Elemento: 510 Elemento: 611 >>>
Así que convertiremos nuestra lista depalabras en un conjunto y lo reco-rreremos de esta manera.Como ya tenemos las pala-bras solo tenemos quereemplazar-lasEl resultado final se puede ver en laFigura 3.
Diseño de la Aplicación
El
WikiWiki
funcionará de la siguientemanera. Cuando se acceda por primeravez, al no estar presente ninguna variable,generaremos una página web de presenta-ción. Esta primera página tendrá un botónque nos permitirá editarla. Para ello inclui-remos un botón dentro de un formulariohtml, que enviará una variable
editar 
conla cadena
WikiWiki
como valor. Nuestroprograma se arrancará de nuevo, pero enesta ocasión verá la variable
editar 
y enlugar de generar una página, buscará en eldirectorio en que esté la existencia de unfichero
WikiWiki.txt 
. Si está presente car-gará su contenido en un
textarea
que nospermitirá editarlo. Vendrá acompañadopor un botón
 guardar 
que al ser pulsadoenviará dos variables:
 guardar 
con el nom-bre de la página (
WikiWiki
en este caso) y
texto
con el texto que hemos editado.Cuando
wiki.py
detecte ambas variablesprocederá a guardar el contenido de
texto
en un fichero con el nombre que contengala variable
 guardar 
concatenado con
.txt 
.El texto, antes de ser guardado, se ana-liza en busca de palabras clave. En elcaso de que aparezcan se realizará lasiguiente transformación en el caso deque exista la página (o sea, el fichero
WikiWiki.txt 
)…
....WikiWiki... en ...
<a href="wiki.py=?pagina=
WikiWiki"> WikiWiki</a>...
… o se realizará la transformación…
...WikiWiki... en ...
WikiWiki <a href="wiki.py=
?pagina=WikiWiki">?</a>...
… en el caso de que no exista, para indi-car con el
que esa página hay que cre-
Figura 3: ¡Bien! Nuestra página ha sido guar-dada.

Activity (5)

You've already reviewed this. Edit your review.
1 thousand reads
1 hundred reads
laudanism liked this
Kurgan Gl liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->