EBAC Logotipo
Menú

6.6 Diseña tus rutas CRUD con el patrón Route-Handler

Verás cómo se organizan las rutas para realizar acciones de Crear, Leer, Actualizar y Eliminar tareas, usando funciones específicas para cada acción. Simulando datos, almacenando en memoria.

1. Introducción al Patrón Route-Handler

En el desarrollo web, una ruta es una URL que el usuario visita, y un handler es la función que responde a esa solicitud.


El Patrón Route-Handler establece una relación clara:

  1. Cada ruta está conectada directamente con una función que define qué debe hacer el servidor.


Este enfoque permite organizar tu aplicación dividiendo cada acción (como crear, leer, actualizar o eliminar datos) en rutas bien definidas.


Así, cada acción de la app tiene una dirección clara (ruta) y una lógica específica (handler).

2. Implementación de la Ruta para Crear Tareas

Para permitir que los usuarios agreguen tareas, necesitamos una ruta que reciba los datos desde un formulario o petición.


  1. Usamos el método POST, que está diseñado para enviar información al servidor.
  2. La ruta se asocia con un handler que procesa esa información y la añade a la lista de tareas.


@app.route('/tareas', methods=['POST'])
def crear_tarea():
# Suponiendo que recibimos un título
titulo = request.form['titulo']
tareas.append(titulo)
return "Tarea creada"

3. Lectura de Tareas Existente

Para mostrar las tareas guardadas en la aplicación, usamos una ruta con el método GET.


Este método se utiliza para obtener información del servidor, sin modificar nada.

  1. El handler asociado debe devolver una respuesta con la lista actual de tareas.


Una forma común de hacerlo es responder en formato JSON, que es fácil de leer y usar en la interfaz del usuario.


Ejemplo:

from flask import jsonify

@app.route('/tareas', methods=['GET'])
def obtener_tareas():
return jsonify(tareas)


Así, los usuarios pueden consultar las tareas existentes desde la interfaz o una API externa.

4. Actualización de Tareas en la Todolist

Cuando un usuario quiere modificar una tarea (por ejemplo, marcarla como completada o cambiar su texto), usamos el método PUT.


  1. Este tipo de ruta recibe datos actualizados y el identificador de la tarea que se quiere modificar.
  2. El handler asociado debe localizar esa tarea en la lista y cambiar la información correspondiente.


Ejemplo:

@app.route('/tareas/<int:id>', methods=['PUT'])
def actualizar_tarea(id):
nueva_info = request.json
tareas[id].update(nueva_info)
return "Tarea actualizada"


Con esta lógica, cada tarea puede ser modificada desde la interfaz sin alterar el resto de la lista.

5. Eliminación de Tareas de la Todolist

Cuando una tarea ya no es necesaria, puede eliminarse usando una ruta con el método DELETE.

  1. Este tipo de ruta recibe el identificador de la tarea que se desea borrar.
  2. El handler debe localizar esa tarea y quitarla de la lista de forma segura.


Ejemplo

@app.route('/tareas/<int:id>', methods=['DELETE'])
def eliminar_tarea(id):
tareas.pop(id)
return "Tarea eliminada"


Este patrón completa el ciclo CRUD: Crear, Leer, Actualizar y Eliminar tareas, cada una con su ruta y handler bien definidos.

6. Gestión de Errores en las Rutas

Un buen diseño de rutas no solo define qué hacer cuando todo funciona, sino también cómo reaccionar cuando algo sale mal.


Es importante verificar que los datos recibidos sean válidos y manejar casos como:

  1. Tareas con ID inexistente
  2. Datos faltantes o incorrectos
  3. Rutas mal escritas o métodos no permitidos


@app.route('/tareas/<int:id>', methods=['GET'])
def obtener_tarea(id):
if id >= len(tareas):
return "Tarea no encontrada", 404
return jsonify(tareas[id])
El manejo de errores mejora la experiencia del usuario y evita que la app se caiga ante casos inesperados.

7. Conclusión y Recursos Útiles

Ahora sabes cómo funciona el Patrón Route-Handler, organizando cada acción CRUD (Crear, Leer, Actualizar, Eliminar) como una ruta con su función asociada.


Es fundamental comprender la importancia de estructurar de manera clara y coherente las rutas y handlers para garantizar un funcionamiento eficiente de la aplicación.


Recursos recomendados:

  1. Documentación oficial de Flask
  2. Stack Overflow (sección Flask)
  3. GitHub - Proyectos Flask CRUD