¡Esta es una revisión vieja del documento!
web.py se basa en la estructura de las URL de la página web. Para trabajar con este tendremos que…
web.web.application.import web urls = ( '/', 'index' ) app = web.application(urls, globals())
En el código anterior estamos diciendo que queremos la URL raíz ( / ), que será gestionada por la clase index, las clases que se utilizarán serán las globales del namespace actual.
Las URL se indican a partir de una parte que es una expresión regular tal como /, /help/faq, /item/(\d+) (por ejemplo d+ permite una secuencia de dígitos), y otra que es el nombre de la clase que recibirá la petición (index, view…).
Cuando en la expresión regular utilizamos un paréntesis indicamos que ese elemento va a ser utilizado luego, a eso se le llama capturar.
Para la segunda parte podemos indicar, por ejemplo, welcomes.hello (modulo welcomes clase hello), get_\1 donde ese \1 se reemplazará por la primera parte capturada de la expresión regular.
Las clases que indiquemos que se van a utilizar en nuestro site deberan definir los métodos correspondientes a los verbos que queramos implementar (GET, POST…).
class index: def GET(self): return "Hello, world!"
Para iniciar el motor de web.py deberemos ejecutar app.run():
if __name__ == "__main__": app.run()
Si ejecutamos el código así, tal cual ($ python code.py), podremos indicar al entorno que escuche por un puerto concreto ($ python code.py 2727) y\o en una dirección concreta ($ python code.py 127.0.0.1 2727, si no lo hiciesemos escucharía por el puerto 8080.
web.input() devuelve los datos pasados por POST.web.input() # Devuelve lista de parámetros.
class index: def GET(self, code): web.header('Content-Type', 'text/xml') return render.index(code)
def GET(self, code): ... web.header('Content-Type', 'text/csv') web.header('Content-Disposition', 'attachment;filename=myfilename.csv') return value
Es una librería que parsea el retorno de una URL en el formato indicado.
import web import json from mimerender import mimerender render_xml = lambda message: '<message>%s</message>'%message render_json = lambda **args: json.dumps(args) render_html = lambda message: '<html><body>%s</body></html>'%message render_txt = lambda message: message urls = ( '/(.*)', 'greet' ) app = web.application(urls, globals()) class greet: @mimerender( default = 'html', html = render_html, xml = render_xml, json = render_json, txt = render_txt ) def GET(self, name): if not name: name = 'world' return {'message': 'Hello, ' + name + '!'} if __name__ == "__main__": app.run()
$ curl -H "Accept: application/html" localhost:8080/x
<html><body>Hello, x!</body></html>
$ curl -H "Accept: application/xml" localhost:8080/x
<message>Hello, x!</message>
$ curl -H "Accept: application/json" localhost:8080/x
{'message':'Hello, x!'}
$ curl -H "Accept: text/plain" localhost:8080/x
Hello, x!
Para utilizar Elixir en un código que utilice web.py simplemente has de lanzar un setup_all() al principio, justo después de haber importado el código del modelo.
Tipo Apache o Lighttpd.
web.header('Content-type', "text/html; charset=utf-8")