Editar tareas

Clase 34 de 36Curso de Flask

Resumen

¿Cómo actualizar el campo "done" de nuestras tareas?

En la clase pasada aprendimos a borrar tareas, y hoy daremos el siguiente paso: implementar una función para actualizar el campo "done" en nuestras tareas. Para empezar, crearemos una nueva ruta específica para esta funcionalidad, la cual se llamará "update". Además, aprovecharemos parte de la lógica ya existente en nuestra aplicación para mejorar la fluidez del proceso. Aquí te mostramos cómo hacerlo.

¿Cómo diseñar la nueva ruta para actualizar "done"?

Comenzaremos por definir nuestra nueva ruta en el sistema, similar a la ruta de eliminación que ya configuramos. Sin embargo, esta ruta se enfocará en el parámetro "done", que se asegurará de ser un número. Esto es crucial ya que dependerá de cómo recibimos y procesamos la información a través de las URLs. La nueva ruta se verá así:

  1. Ruta de actualización: todos/update/<todo_id>/<done>
  2. Método permitido: Solo acepta solicitudes POST.
  3. Obtener "user ID": Al igual que en otras rutas, obtendremos el user_id del usuario actual.

¿Cómo implementar el método "update_todo" en el servicio Firestore?

Dentro de nuestro servicio Firestore, crearemos el método update_todo, el cual aceptará parámetros como el user_id, todo_id y done. Siguiendo buenas prácticas, iniciaremos con la creación de una función privada que nos ayude a obtener la referencia del documento "todo":

def get_todo_ref(user_id, todo_id):
    # Regresa la referencia del todo
    pass

Esta función será clave para referenciar correctamente el documento antes de actualizar el campo "done". Con la referencia en mano, procederemos a implementar el método de actualización:

def update_todo(user_id, todo_id, done):
    todo_ref = get_todo_ref(user_id, todo_id)
    todo_ref.update({'done': not done})

¿Cómo integrar el formulario de actualización en el sistema?

Una vez definida la lógica de actualización, es momento de crear un formulario que permita a los usuarios hacer la actualización de manera sencilla. Este formulario tendrá un único botón de envío y se integrará así:

  1. Importar el formulario: Hacemos la importación en los archivos principales.
  2. Contexto: Integramos el formulario de actualización al contexto de la aplicación.
  3. Renderizado: Al igual que con otras partes de la aplicación, renderizamos el formulario con la URL adecuada.

¿Cómo manejar valores booleanos en "done"?

El parámetro "done" será tratado como un número que representará su estado booleano: 0 para false y 1 para true. En Python, esta conversión es clave para cambiar el estado y persistirlo correctamente en Firestore. Al final del proceso, la función de actualización se asegurará de alternar estos valores con las siguientes líneas de código:

todo_done = not bool(done)

Esta línea convierte done a su valor opuesto. Si era true, se convertirá a false, y viceversa.

¿Cómo garantizar la correcta redirección después de la actualización?

Después de completar la actualización, es crucial redirigir al usuario a una página de confirmación o a la vista principal de la aplicación. Utilizaremos redirect y url_for para volver a la vista "hello", permitiendo así una experiencia de usuario fluida:

return redirect(url_for('hello'))

¿Qué logramos con esta implementación?

Con esta funcionalidad añadida, nuestra aplicación ahora permite a los usuarios:

  • Crear, borrar y actualizar tareas de manera sencilla.
  • Iniciar y cerrar sesión.
  • Registrar nuevos usuarios.

Al culminar este módulo, es momento de soñar en grande: en la próxima sesión aprenderemos a desplegar nuestra aplicación en el mundo real, permitiendo que cualquier persona, en cualquier parte del mundo, pueda acceder a ella y probar las funcionalidades que hemos creado juntos. ¡Adelante, sigue aprendiendo y trabajando para convertirte en un experto desarrollador!