Materia
Ejercicios


Tarea 3: The Cinema Python

Objetivos de aprendizaje

Después de resolver la tarea 3, usted será capaz de:

  • Operar sobre un archivo con una estructura pre-definida de datos,
  • Realizar procesamiento de texto sobre datos con un formato específico,
  • Conocer código html para el desarrollo de una página web,
  • Guardar datos en un archivo.

Enunciado

En esta tarea usted deberá implementar un sitio web para la gestión de películas y actores, el cual deberá tener las siguientes funcionalidades:

  • Crear cuentas de usuarios para el sitio.
  • Agregar/Editar/Eliminar películas.
  • Agregar/Editar/Eliminar actores.
  • Añadir actores a películas.
  • Votar por una película

Además la página web deberá mostrar en su página principal aquella película que posee más votos.

Para desarrollar las funciones anteriores se les entregará un conjunto de archivos que les proveerá de algunas funciones ya implementadas y otras que deben implementar con su equipo de trabajo.

Archivos

Los archivos que se le entregarán los puede descargar acá y cada uno de ellos se describe a continuación:

  • Cinema_python.py, este archivo es el encargado de levantar el servidor que permite ver el sitio. No modificar.
  • funciones.py, archivo que contiene las funciones que usted deberá implementar para el correcto funcionamiento del sitio.
  • usuarios.dat, archivo de texto que contiene los usuarios que han sido registrados en el sitio.
  • peliculas.dat, archivo de texto que contiene las películas que han sido registradas en el sitio.
  • actores.dat, archivo de texto que contiene los actores que han sido registrados en el sitio.
  • relaciones.dat, archivo de texto que contiene los id’s de los actores junto a los id’s de las películas, relacionadas en una misma líneas si son dependientes entre sí.

Nota

Todos estos archivos deben estar en el mismo directorio de trabajo. Además encontrará la carpeta static, las carpetas css, img y js, usted usará img para guardar todas las imágenes que desee agregar al sitio, además contiene los archivos html y CSS usados para generar la página web.

Funcionamiento

Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo python Cinema_Python.py. Se mostrará el siguiente mensaje:

Bottle v0.11.dev server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

Este mensaje indica que el servidor web que contiene el sitio se está ejecutando de manera local. Abra su navegador preferido (chrome, internet explorer, safari u otro) y escriba la dirección http://localhost:8080/, se debería mostrar la página web que aparece en el video.

El sitio se divide en las siguientes secciones:

  • Página de Inicio de Sesión: se muestra al escribir la dirección http://localhost:8080. En esta página el usuario debe ingresar su nombre de usuario y la password que el sitio le genera para iniciar sesión, se muestran los buscadores para películas y actores, la lista con las películas para otorgar un voto, y la ficha de la película más votada.
  • Usuario: Página que muestra el menú principal de un usuario registrado.
  • Editar Usuario: Página que muestra el formulario para editar mis datos personales.
  • Añadir película: Se muestra el formulario para agregar una nueva película.
  • Editar Película: Se muestra el formulario para editar una película ya existente.
  • Eliminar Película: Se muestra la lista de las películas existentes con la opción para ser borradas.
  • Añadir actor: Se muestra el formulario para agregar un nuevo actor.
  • Editar actor: Se muestra el formulario para editar un actor existente
  • Eliminar actor: Se muestra la lista de los actores registrados, con el botón de borrar.
  • Agregar actor a película: Se muestran las listas de actores y películas para agregar una relación entre ellos, se lee “El actor” nombreactor, “Actuó en ”, nombre película.

El sitio cuenta con enlaces que permiten entrar a cada uno de los sitios mostrados anteriormente.

Representación

El archivo Usuarios.dat posee la siguiente estructura:

#id_usuario;Nombre_usuario;nickname;año_de_nacimiento;Pais;password
../../_images/usuariosdat.png

El archivo Peliculas.dat posee la siguiente estructura:

#id_Película;Nombre_Película;director;país;fechadeestreno;genero;duración(en minutos);url de la imagen;url del tráiler(usar youtube);votos
../../_images/peliculasdat.png

El archivo Actores.dat posee la siguiente estructura:

#id_actor;nombre;fechadenacimiento;lugar de nacimiento;url de la imagen
../../_images/actoresdat.png

El archivo Tags.dat posee la siguiente estructura:

#nombre de la película;tag1,tag2,…….,tagn
../../_images/tagsdat.png

El archivo Relaciones.dat posee la siguiente estructura:

#id_relacion;idactor;idPelícula
../../_images/relacionesdat.png

Qué hay que implementar

Las funciones que usted debe implementar con su equipo de trabajo son las siguientes:

  • buscar_id(nickname): En base a un nickname(tipo String) deberá retornar su id correspondiente al usuario, de no encontrarlo, debe retornar 0.
  • verificar_password(password,ide): En base a un ide y una password proporcionada, retornara True si el usuario con id “ide” posee la contraseña “password”, False en caso contrario.
  • verificar_ingreso(usuario, password): En base a un nombre de usuario y una contraseña proporcionados, debe retornar True si la contraseña pertenece al usuario correspondiente, en el caso contrario deberá retornar False.
  • Agregar_actor(datos): En base al diccionario datos (ver imagen), se deberá añadir un registro (linea) al archivo correspondiente, con su id correspondiente, la función no retorna nada.

Consideración : debe verificar que el actor no existe, de existir no deberá agregar el registro.

../../_images/agreactor.png
  • eliminar_actor(id): En base al id proporcionado, se debe eliminar el registro correspondiente, además debera desplazar todos los id´s que le prosiguen, cuidando que el archivo mantenga su orden, como estos también tienen dependencias en el archivo relaciones.dat, se debe modificar este archivo, sobreescribiendo o eliminando los id´s que corresponda, la función no retorna nada.

Consideración: al eliminar un actor, se deberá eliminar la relación que este actor tenia con alguna película.

  • sobre_escribir_actor(datos): Esta función recibe un diccionario como el presentado en la imagen de más abajo. Notar que este diccionario viene con un campo id, que corresponde al id del actor seleccionado al cual se le desea sobreescribir los datos. Al editar, los nuevos datos deberán quedar en la misma posición que el registro previo a la edición, es decir, por ejemplo si el actor a editar posee el id #5, los datos nuevos deben quedar en la línea #5, está prohibido que quede en la última línea, el archivo siempre debe mantener el orden correlativo de los id´s.
../../_images/sobreactor.png
  • agregar_Pelicula(datos): En base al diccionario datos(ver imagen), deberá añadir el registro adecuadamente a los archivos correspondientes, recuerde que los tags van al archivo tags.dat, la función no retorna nada.

Consideración: debe corroborar que el nombre de la película a agregar no existe en el archivo, de ser asi, no debe agregar nada.

../../_images/agrepeli.png
  • sobre_escribir_Pelicula(datos): En base al diccionario datos(ver imagen), deberá sobreescribir los datos de la Película correspondiente al id proporcionado, en los archivos correspondientea. Al editar, los nuevos datos deberán quedar en la misma posición que el registro previo a la edición, el archivo siempre debe mantener el orden correlativo de los id´s.:

Consideración: al igual que con los actores, deberá modificar las relaciones si fuera necesario.

../../_images/sobrepeli.png
  • eliminar_Pelicula(id): En base al id proporcionado, se debe eliminar el registro correspondiente, además deberá desplazar todos los id´s que le prosiguen, cuidando que el archivo mantenga su orden, como estos también tienen dependencias en el archivo relaciones.dat, se debe modificar este archivo, sobreescribiendo o eliminando los id´s que corresponda, la función no retorna nada.

Consideración: al eliminar una película, todos los actores que estaba relacionados con esta, deben ser desenlazados, es decir, eliminar aquellas relaciones; recuerde los tags de la película.

  • sobre_escribir_usuario(datos): En base al diccionario datos (ver imagen), se deberá editar los datos del usuario correspondiente en su debido archivo. Sobreescribiendo los datos anteriores en la misma línea del archivo, en el mismo orden, preservando el orden correlativo de los id´s, este elemento permanece intacto. La función no retorna nada.

Consideración: El código de los If presentado en la imagen es sólo para que usted sepa las verificaciones necesarias que se deben realizar para poder sobre escribir un usuario y saber, además, dónde se hace el llamado a la función.

../../_images/sobreusu.png
  • guardar_datos(datos): Usada en el registro de un nuevo usuario, en base al diccionario datos (ver imagen), deberá escribir un nuevo registro en el archivo correspondiente, la id para el usuario debe ser autoasignada (calculada por usted en base a los usuarios existentes). La función no retorna nada.

Consideración: deberá corroborar que el nickname no existe, de existir no debe agregar nada.

../../_images/guardadatos.png
  • obtener_actores(idPelicula): En base a un idPelícula proporcionado deberá retornar un conjunto con los nombres de los actores que participaron en la película. Si no existe alguna relación entre actor y película, debe retornar el conjunto vacio.
  • obtener_peliculas(idactor): En base a un idactor proporcionado deberá retornar un conjunto con los nombres de las películas en las que particpó cierto actor. Si no existe alguna relación entre actor y película, debe retornar el conjunto vacio.
  • crear_relacion(datos): En base al diccionario datos, debe crear la relación correspondiente, asignándole un nuevo id.
../../_images/crearela.png

Bonificación

Se otorgará puntaje adicional si el equipo de trabajo, además de implementar las funciones señaladas anteriormente, desarrolla las siguiente función:

  • votar_Pelicula(idPelicula): En base al id_entregado, debe sumar 1, al campo voto del registro correspondiente en el archivo películas.dat
  • recomendar_Pelicula(): Debe procesar el archivo películas.dat y retornar una lista con todos los elementos de la película que posea mayor cantidad de votos. En caso de igualdad devuelva cualquiera. Por ejemplo:

[´1´,´X-men days of future past´,´Bryan Singer´,´USA´,´23/05/2014´,´ciencia ficción´,´131´,´xmen.jpg´,´http://www.youtube.com/watch?v=pK2zYHWDZKo´,´4´]

  • buscar_Peliculas(tag): En base a un tag proporcionado, debe retornar un conjunto con el nombre de todas las películas que posean aquel tag.

Consideraciones

  • Sólo están permitidos los siguientes caracteres: espacios, letras minúsculas (a-z), letras mayúsculas (A-Z) y números (0-9). Algunos campos en las páginas limitan el uso de ciertos caracteres.
  • Puede implementar otras funciones, además de las que se solicitan para pasos intermedios que le permitan obtener la información solicitada en las funciones.
  • Puede crear archivos intermedios que le permitan realizar lo solicitado en el enunciado (archivos temporales).
  • Puede utilizar comentarios en las funciones para explicarlas.
  • Está prohibido modificar el archivo principal, solo puede alterar funciones.py
  • En el archivo fucionnes.py se encuentra la función habilitar_recomendacion(), la cual está retornando False. Una vez que usted haya desarrollado la función recomendar_pelicula() debe cambiar el valor de retorno de la función habilitar_recomendacion() a True, para que la función muestre los resultados en la página principal.
  • El tamaño máximo del archivo a subir a la plataforma Moodle, es de 5 MB, por tanto, si desea agregar nuevas imágenes a su tarea, debe re-dimensionar estas para que no exceda dicho tamaño.
  • Recordar que para agregar imágenes a la tarea, estas deben estar alojadas en la carpeta static\img

Ayuda

Usted puede hacerse miembro del grupo facebook Tareas de programación. Ahí habrá ayudantes y profesores que podrían ayudarlo con dudas o consultas de la tarea.

Entrega

La fecha de entrega es el Viernes 04 de Julio a las 23:00.

La tarea debe ser resuelta en equipos de dos o tres personas. De lo contrario habrá penalización en la nota.

Sólo uno de los integrantes del equipo debe subir la tarea en la sección Aula Virtual de la plataforma Moodle, ingresando al campus que corresponda. ¡No la suba a la sección de su paralelo!

Se debe entregar un archivo comprimido (.zip) con todos los archivos para hacer funcionar la tarea con el nombre tarea-3-RUT.zip, reemplazando RUT por el RUT del integrante que subirá la tarea. Sólo debe ir la parte del RUT hasta antes de la raya. Por ejemplo: tarea-3-18000123.zip.

Al principio del archivo funciones.py se debe poner un comentario indicando los RUT de los integrantes del equipo, como en el siguiente ejemplo:

# Integrantes:
# 18000123-0 Perico Los Palotes
# 18000456-7 Fulanita de Tal
# 18000890-k Federico Santa Maria

No se puede subir ningún archivo adicional.

Evite dejar para última hora la entrega de la tarea. Cerca del plazo final, la plataforma seguramente estará sobrecargada.

Se recibirán tareas con 1 día de retraso como máximo, las cuales tienen el descuento estipulado en la rúbrica de la tarea. Si hay entregas posterior a este plazo serán evaluadas con nota cero.

Recuerde que para que todos los miembros del equipo sean evaluados, deben estar matriculados en “Alumnos de CAMPUS” (donde CAMPUS es el campus al cual usted pertenece).

Los equipos de trabajo pueden ser los mismos de la tarea anterior, pero recuerde que deben ser de 2 ó 3 personas.

Políticas de copia

Usted puede discutir la tarea con compañeros de otros grupos, pero bajo ningún motivo puede compartir o copiar el código de su tarea. Cada equipo debe escribir su propio código.

Las políticas de copia de la asignatura rigen para la tarea.

En caso de tener problemas con el desarrollo de la tarea, consulte a su profesor o asista a las ayudantías.