Cómo hacer una Mini Galería de Imágenes en Bottle, ejemplo basado en el Hola Mundo.
Usa Bottle para servir 1 página incrustada en la propia aplicacion, la misma desplega HTML, CSS y Js.
#!/usr/bin/env python # -*- coding: utf-8 -*- # from bottle import route from bottle import run from bottle import redirect from bottle import debug from bottle import error from bottle import request from bottle import abort import os # GALLERY = """ <!DOCTYPE HTML> <html> <head> <title>PYTHON-BOTTLE DEMO</title> <link rel="shortcut icon" href="http://python.org.ar/images/pyar.ico" type="image/x-icon"/> <meta http-equiv="X-UA-Compatible" content="chrome=1"> <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> <style type="text/css"> body { background-color: black; } </style> <script language="JavaScript"> <!-- if (document.images) { demo1 = new Image(); demo1.src = "http://www.gstatic.com/webp/gallery/5.webp"; demo2 = new Image(); demo2.src = "http://www.gstatic.com/webp/gallery/2.webp"; demo3 = new Image(); demo3.src = "http://www.gstatic.com/webp/gallery/3.webp"; demo4 = new Image(); demo4.src = "http://www.gstatic.com/webp/gallery/4.webp"; } function timeimgs(numb) { // Reusable timer thetimer = setTimeout("imgturn('" +numb+ "')", 1000); } function imgturn(numb) { if (document.images) { if (numb == "4") { document["demo"].src = eval("demo4.src"); timeimgs('1'); } else { document["demo"].src = eval("demo" + numb + ".src"); timeimgs(numb = ++numb); } } } // --> </script> </head> <body onload="timeimgs('1');"> <div align="center"> <img src="http://www.gstatic.com/webp/gallery/1.webp" name="demo" width="1024" height="768" alt="demo" title="PYTHON-BOTTLE DEMO"> </div> </body> </html> """ # @route('/') def index(): return GALLERY # Ejemplo de uso de bottle.request para mostrar tu direccion ip @route('/tu_ip') # ingresando a esa URL devuelve tu IP def show_ip(): ip = request.environ.get('REMOTE_ADDR') return ip # Ejemplo de uso de bottle.error para el 404, la pagina no existe @error(404) def mistake404(code): # Usando HTML directamente, de ejemplo. return '<title>bottle app</title><br><b>ERROR 404:la pagina no existe.</b>' # Ejemplo de uso de bottle.abort para URL no permitida, error 401 @route('/restricted') def restricted(): abort(401, 'ERROR 401:URL no permitida.') # Ejemplo de Redireccion bottle.redirect de URL, por URL incorrecta @route('/index.php') # si va a index.php def wrong(): redirect("/") # enviarlo a "/" ############################################################################### # Ejecucion de Main def main(): debug(True)# True para desarrollo, False para Produccion # # Por que es esto?: Puerto <1024 requiere Privilegios elevados if os.geteuid()==0: # root check run(host='0.0.0.0', port=80, reloader=True) else: run(host='127.0.0.1', port=8080, reloader=True) if __name__=="__main__": main()
Disclaimer: el uso o no de SheBang/Declaracion de Encoding queda a criterio del usuario.
Fe de Erratas: seguramente hay una forma mejor de hacerlo, pero esta funciona correctamente.