Lorenzo es un melómano y un coleccionista de música. Ha pasado toda su vida coleccionando álbumes musicales en discos, casetes y CDs, y tiene tantos, que tiene problemas para recordar en cuál álbum puede encontrar una canción que quiere escuchar. Para solucionar este problema creó un sistema para almacenar la información de su colección y tener dónde buscar en su colección de manera más fácil las canciones que quiere ubicar. Su amigo vio su solución y le propuso convertirla en un servicio de almacenamiento de información musical en línea.
Con este propósito, Lorenzo ha decidido construir una aplicación web que le permita administrar sus álbumes y canciones. Este sistema debe ser capaz de permitir el registro de otros melómanos con un nombre y una contraseña. Cada usuario podrá tener un listado de álbumes para guardar por cada uno el título, año de producción, descripción, los artistas que interpretaron las canciones, las canciones que contiene y el medio sobre el cual está grabado. El sistema le debe permitir a un usuario adicionar álbumes en cualquier momento. El sistema también le debe permitir modificar sus datos, e incluso borrar los álbumes si ingresa alguno repetido o que se dañó y ya no se puede escuchar.
Cuando un usuario elige un álbum de la lista, debe ver su información y las canciones que tiene. Para las canciones del álbum, Lorenzo necesita almacenar su título, duración en minutos y segundos y su intérprete. La idea que tiene es que en cualquier momento pueda editar la información o borrar las canciones, e incluso añadir canciones al registro de canciones para que otros usuarios puedan buscar y añadirlas a sus propios álbumes.
Para iniciar nuestro proyecto guiado, trabajaremos sobre un sistema operativo Linux (Ubuntu) con Visual Studio Code. Es importante tener instalado Python3 y virtualenvironment para configurar nuestro espacio de trabajo.
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
En esta tarea nos concentraremos en los fundamentos de Flask. Aprenderemos a crear una aplicación básica y funcional mínima sobre la que construiremos el resto de nuestro proyecto.
Una vez termines esta tarea, es recomendable crear un repositorio usando GIT en algún servidor en línea para continuar y guardar el progreso del resto de las tareas del proyecto a medida que avances en el mismo.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_1 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
En esta Tarea nos vamos a concentrar en crear las clases según el modelo. Para esto vamos a usar Flask_SqlAlchemy, una librería de Python que extiende las funcionalidades de SQLAlchemy para su uso con Flask.
En la tarea guiada nos concentramos en crear la clase Canción con sus atributos y realizar una prueba simple para verificar que funciona correctamente.
Una vez implementada al clase Canción juntos, antes de pasar a la siguiente parte, es tu turno de implementar las clases Album y Usuario según el modelo de clases.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_2 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea no es necesario instalar nuevas librerías, ya que seguiremos usando Flask-SQLAlchemy.
En esta Tarea vamos a implementar la relación uno a muchos entre las clases Usuario y Album y la relación muchos a muchos entre las clases Album y Canción en notación de SQLAlchemy, para terminar de construir el modelo de clases completo en nuestra aplicación.
Si no has seguido el tutorial desde cero, puedes descargarte la parte anterior de github con la instrucción
git clone -b tarea_3 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
En esta Tarea vamos a usar marshmallow para implementar la serialización y deserialización de nuestros objetos en la base de datos en formato JSON. En particular nos concentraremos en implementar el esquema de serialización para la clase Album, que debido a su enumeración, requiere un poco más de trabajo.
Una vez implementada la serialización de la clase Album, antes de pasar a la siguiente tarea, es tu turno de implementar los esquemas para las clases Canción y Usuario.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_4 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
En esta tarea nos concentraremos en implementar las operaciones del CRUD para nuestra clase Album y exponerlas en el API REST de nuestra aplicación. Nos concentraremos en implementar:
Una vez implementado el CRUD para la clase Album, antes de pasar a la siguiente tarea, es tu turno de implementar el CRUD para el resto de las clases e implementar todos los requerimientos de la aplicación.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_5 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea no instalaremos nuevas librerías pero usaremos la aplicación Postman.
Le haremos pruebas a los endpoints de nuestra aplicación que hemos implementado en el punto anterior. En particular, nos concentraremos en probar las funcionalidades asociadas a los Albumes.
Una vez probadas las funcionalidades asociadas a la clase Album de nuestra aplicación, antes de pasar a la siguiente Tarea, es tu turno de completar las pruebas faltantes. Usando Postman, realiza varias pruebas a los otros endpoints para verificar que el resto de funcionalidades se comportan de la manera esperada.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_5 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
En esta tarea implementaremos las funcionalidades para darse de alta e iniciar sesión en nuestra aplicación usando tokens de seguridad y JWT. En este caso, nos concentraremos en definir el comportamiento para inicio de sesión con el envío de Token y algunas funcionalidades que requerirán token para ser accedidas. En el estado actual de nuestra aplicación, haremos estas pruebas usando Postman.
Una vez implementada la estructura básica para manejar tokens, darse de alta e iniciar sesión, es tu turno de complementar y seleccionar otras funcionalidades que deban requerir tokens.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_5 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
También necesitaremos instalar las siguientes librerías:
Y habilitar las extensiones de VSCODE:
En esta tarea usaremos angular para crear un frontent básico para nuestra aplicación que nos permita listar todas las canciones de la misma. Nos concentraremos en la estructura de un front en angular y algunos conceptos básicos como componentes, módulos y servicios, sin entrar a jugar con estilos.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_5 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
También necesitamos instalar un servidor de Redis.
En esta tarea implementaremos aprenderemos a usar Colas de Mensaje. Usaremos Redis como broker de mensajes y Celery como la cola de Tareas. En particular para crear una tarea que serialice la información de un usuario, sus albumes y sus canciones.
Si no has seguido el tutorial desde cero, puedes descargarte desde Github la parte anterior de la tarea estando una carpeta vacía llamada TutorialCanciones con la siguiente instrucción:
git clone -b tarea_5 --single-branch http://github.com/MOOC-tutorials/TutorialCancionesFlask.git .
Para esta tarea es necesario instalar las siguientes librerías a través de pip:
También necesitamos instalar un servidor de Redis.
En esta tarea implementaremos dos microservicios que respondan a dos funcionalidades que añadiremos a nuestra aplicación monolítica. El primero será para puntuar una canción dada con estrellas, y el segundo para mostrar una tabla de puntajes. Usaremos para estos microservicios comunicación vía HTTP Requests y una cola de mensajes.