Saltar al contenido principal

Introducción al marco web Bottle

Bottle es un marco web rápido, simple y liviano para construir aplicaciones web utilizando Python. Está diseñado para ser fácil de usar, pero lo suficientemente potente como para manejar tareas complejas. Bottle sigue la filosofía minimalista, proporcionando solo las herramientas y características esenciales necesarias para desarrollar aplicaciones web.

En este tutorial, exploraremos la historia, características y ejemplos del marco web Bottle.

Historia

Bottle fue creado por Marcel Hellkamp en 2010 como un micro marco web para Python. Fue inspirado por otros micro marcos como Flask y Sinatra. Desde su creación, Bottle ha ganado popularidad debido a su simplicidad, velocidad y facilidad de uso.

Características

Enrutamiento

Una de las características clave de Bottle es su sistema de enrutamiento. Te permite mapear URLs a funciones o métodos de Python, lo que facilita la definición del comportamiento de tu aplicación web. Aquí tienes un ejemplo de una ruta simple:

from bottle import route, run

@route('/')
def index():
return "¡Hola, mundo!"

run(host='localhost', port=8080)

En este ejemplo, el decorador @route('/') mapea la URL raíz a la función index. Cuando un usuario visita la URL raíz (http://localhost:8080/), se llama a la función y se devuelve la cadena "¡Hola, mundo!" como respuesta.

Plantillas

Bottle incluye un motor de plantillas incorporado que te permite separar la lógica y la presentación de tu aplicación web. Puedes usar plantillas para generar páginas HTML dinámicas insertando datos en marcadores predefinidos. Aquí tienes un ejemplo:

from bottle import route, run, template

@route('/saludo/<nombre>')
def saludo(nombre):
return template('¡Hola, {{nombre}}!', nombre=nombre)

run(host='localhost', port=8080)

En este ejemplo, la función saludo toma un parámetro nombre de la URL y lo pasa a la plantilla como la variable nombre. El motor de plantillas reemplaza {{nombre}} con el valor proporcionado, lo que resulta en un saludo personalizado.

Manejo de solicitudes

Bottle proporciona métodos convenientes para manejar solicitudes HTTP. Puedes acceder fácilmente a datos de solicitud como encabezados, parámetros de consulta y datos de formulario. Aquí tienes un ejemplo:

from bottle import route, run, request

@route('/inicio-de-sesion')
def inicio_de_sesion():
nombre_usuario = request.query.get('nombre_usuario')
contraseña = request.query.get('contraseña')

# Realiza la lógica de inicio de sesión aquí

return "Sesión iniciada correctamente"

run(host='localhost', port=8080)

En este ejemplo, la función inicio_de_sesion recupera el nombre_usuario y la contraseña de los parámetros de consulta de la URL. Luego puede usar estos datos para realizar la lógica de inicio de sesión necesaria y devolver una respuesta.

Middleware

Bottle admite middleware, lo que te permite modificar los objetos de solicitud y respuesta antes de que lleguen a tus controladores de ruta. Esta característica es útil para tareas como autenticación, registro y manejo de errores. Aquí tienes un ejemplo:

from bottle import route, run, request, response

def middleware_de_autenticacion(callback):
def envoltura(*args, **kwargs):
# Realiza la lógica de autenticación aquí

if no_autenticado:
response.status = 401
return "No autorizado"

return callback(*args, **kwargs)

return envoltura

@route('/protegido')
@middleware_de_autenticacion
def ruta_protegida():
return "Tienes acceso a esta ruta protegida"

run(host='localhost', port=8080)

En este ejemplo, la función middleware_de_autenticacion envuelve la función de devolución de llamada con lógica adicional para realizar autenticación. Si el usuario no está autenticado, se devuelve un código de estado 401 No autorizado.

Ejemplos

Aplicación web de lista de tareas

Aquí tienes un ejemplo de una sencilla aplicación web de lista de tareas usando Bottle:

from bottle import route, run, template, request

tareas = []

@route('/')
def index():
return template('index', tareas=tareas)

@route('/agregar', method='POST')
def agregar_tarea():
tarea = request.forms.get('tarea')
tareas.append(tarea)
return template('index', tareas=tareas)

run(host='localhost', port=8080)

En este ejemplo, la aplicación muestra una lista de tareas y permite a los usuarios agregar nuevas tareas. La ruta index renderiza la plantilla index, pasando la lista tareas como una variable. La ruta agregar_tarea maneja el envío del formulario y agrega la nueva tarea a la lista.

API REST

Bottle también se puede utilizar para crear APIs RESTful. Aquí tienes un ejemplo de una API simple para administrar tareas:

from bottle import route, run, request, response

tareas = []

@route('/tareas', method='GET')
def listar_tareas():
return {'tareas': tareas}

@route('/tareas', method='POST')
def crear_tarea():
tarea = request.json.get('tarea')
tareas.append(tarea)
response.status = 201
return {'mensaje': 'Tarea creada'}

run(host='localhost', port=8080)

En este ejemplo, el punto final /tareas admite los métodos GET y POST. La función listar_tareas devuelve una respuesta JSON que contiene la lista de tareas. La función crear_tarea recibe una carga útil JSON que contiene los datos de la tarea, los agrega a la lista y devuelve un mensaje de éxito.

Para obtener más información y documentación, puedes visitar el sitio web oficial de Bottle: https://bottlepy.org/