paint-brush
Flix-Finder: Creación de una aplicación de recomendación de películas con Django y BrightData [Parte 1/3]por@infinity
3,293 lecturas
3,293 lecturas

Flix-Finder: Creación de una aplicación de recomendación de películas con Django y BrightData [Parte 1/3]

por Rishabh Agarwal9m2023/06/22
Read on Terminal Reader

Demasiado Largo; Para Leer

La aplicación Django permitiría a su usuario filtrar películas según las calificaciones de varias agencias calificadoras. Usaremos los servicios de BrightData para obtener los datos necesarios para nuestra aplicación. Comencemos a construir Flix-Finder instalando Django y configurando nuestro proyecto Django.
featured image - Flix-Finder: Creación de una aplicación de recomendación de películas con Django y BrightData [Parte 1/3]
Rishabh Agarwal HackerNoon profile picture

¿Alguna vez ha tenido problemas para decidir qué programa de televisión o película ver a continuación? Tomar una decisión sobre su próxima maratón nunca es fácil porque hay muchas opciones accesibles en diferentes proveedores de transmisión.


Al decidir sobre nuestra próxima película, nos basamos principalmente en las reseñas y calificaciones de varias agencias de calificación (como IMDB). Sin embargo, elegir en qué calificación creer puede ser difícil dada la abundancia de estas instituciones.


Dicho esto, con frecuencia es más seguro ver una película que ha recibido buenas calificaciones de varias de estas organizaciones. ¿Pero no es difícil encontrar una película así? ¡Sí, lo es!


¡En esta serie de tres blogs, crearemos una solución de software para resolver este problema exacto! Esta aplicación de Django, a la que llamaremos Flix-Finder, permitiría a su usuario filtrar películas según las calificaciones de varias agencias calificadoras.


Usaremos los servicios de BrightData para obtener los datos necesarios para nuestra aplicación.


Entonces, sin más preámbulos, comencemos a construir Flix-Finder.

Configuración de la aplicación

¡Antes de comenzar con esta sección, asegúrese de que Django esté instalado en su sistema!


El siguiente comando debería funcionar si Django está instalado en su sistema.

python3 -m django --version


¡Use pip para instalar Django si no está instalado en su sistema!

python3 -m pip install Django


Comencemos configurando nuestro proyecto Django. Crea un nuevo proyecto usando el siguiente comando.


 rishabh@my-ubuntu:~/projects$ python3 -m django startproject flix_finder


Cambie el directorio al directorio del proyecto recién creado flix_finder . Abra su editor de código favorito aquí. Debería ver los siguientes archivos en este directorio creados automáticamente por Django.


 rishabh@my-ubuntu:~/projects/flix_finder$ tree . . ├── flix_finder │ ├── asgi.py │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py 1 directory, 6 files


Para saber más sobre estos archivos, consulte esta explicación proporcionada por Django.


¡Intente ejecutar el servidor Django y acceder localhost:8000 para asegurarse de que la configuración se haya completado correctamente!


 rishabh@my-ubuntu:~/projects/flix_finder$ python3 manage.py runserver

Crear una nueva aplicación y nuestra primera vista

Una aplicación Django (o aplicación Django) se refiere a un componente de un proyecto Django más grande que encapsula una característica o funcionalidad individual. Las aplicaciones de Django son componentes reutilizables e independientes. Se componen de modelos, vistas, plantillas, pruebas y otros archivos.

Toda la lógica de recomendación para nuestro proyecto residiría en una aplicación llamada recommender . Para crear esta aplicación, ejecute el siguiente comando.


 rishabh@my-ubuntu:~/projects/flix_finder$ python3 manage.py startapp recommender


El comando anterior creará una nueva carpeta llamada recommender . Toda la lógica de nuestra aplicación iría dentro de esta carpeta.


Queda un paso más antes de que podamos decir que nuestra aplicación se creó con éxito. Continúe y agregue el nombre de la aplicación recién creada en la lista INSTALLED_APPS presente en flix_finder/settings.py .


 # flix_finder/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'recommender' ]


Con esto, hemos creado con éxito nuestra aplicación recommender .


Ahora, vamos a crear nuestra primera vista.


En Django, las vistas son funciones de Python que reciben solicitudes HTTP y devuelven respuestas HTTP. Las vistas juegan un papel importante en la presentación de datos a los usuarios en función de alguna lógica empresarial.


Cree un nuevo método recommender/views.py . Este método atendería las solicitudes que llegan a través de localhost:8000/ . Por ahora, este punto final simplemente devuelve un mensaje de saludo.


 from django.http import HttpResponse def index(request): return HttpResponse("Hello From Recommender!")


Hemos creado el método de vista para manejar la solicitud, pero no hemos especificado (en nuestro proyecto) qué puntos finales corresponden a esta vista. Hacemos esto en los archivos urls.py


Cree un nuevo archivo dentro de la aplicación de recomendación y asígnele el nombre urls.py . Aquí, especificamos esta correspondencia entre la URL y el método de vista.


 from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index") ]


Ahora necesitamos hacer que Django esté al tanto del archivo de esta nueva URL. Actualice el archivo flix_finder/urls.py a lo siguiente.


 from django.urls import path, include urlpatterns = [ path('', include("recommender.urls")), path('admin/', admin.site.urls), ]


Inicie su servidor, si aún no lo ha hecho, y abra localhost:8000 en su navegador. Deberías ver el mensaje de saludo.


¡Hola mensaje de nuestra aplicación de recomendación!


¡Felicitaciones, acaba de completar la creación de su primera vista!

Usemos plantillas…

Pongámonos de acuerdo... enviar una cadena como respuesta no es la mejor de las cosas. En su lugar, deberíamos enviar una respuesta HTML adecuada. Y para este propósito exacto, usaremos Plantillas de Django.


Cree templates de directorio bajo el director recommender . El nombre de esta carpeta recién creada es especial ya que Django busca por defecto archivos HTML en los directorios denominados templates .


Cree un nuevo archivo llamado index.html dentro del directorio recién creado. Dentro de este archivo, escribiremos el HTML que queremos mostrar cuando los usuarios visiten localhost:8000 .


Dado que escribir HTML no es el enfoque principal aquí, me saltaré la explicación de esa parte y simplemente puede copiar el HTML desde aquí .


Estas son algunas de las cosas que necesita saber sobre este archivo HTML (o plantilla de Django):


(1) Este HTML muestra cuatro cosas en la página web: barra de navegación, carrusel, formulario de búsqueda de películas y resultados de búsqueda de películas.


(2) Utiliza el lenguaje de plantillas Django para permitir el uso de variables de Python directamente dentro del HTML.


(3) Espera la variable featured_movies en el contexto (datos pasados a la plantilla) y la usará para mostrar el carrusel.


(4) Espera que la variable form se llene con un objeto de formulario de Django y lo usará para mostrar el formulario de búsqueda de películas.


(5) Espera la variable filtered_movie_list y la utilizará para mostrar los resultados de la búsqueda.


(6) También espera la variable no_result_error que indica si la búsqueda resultó en una respuesta vacía.


También necesitaremos agregar algo de CSS para diseñar. Cree un directorio static en el directorio recommender . Esta carpeta contendrá todos los archivos estáticos.


Cree un nuevo archivo llamado style.css y pegue el CSS de esta URL .


Con esto, tenemos todo el HTML y CSS requerido en su lugar. A continuación, debemos crear el formulario de búsqueda de películas.

Creación del formulario de búsqueda de películas

Dado que nuestra plantilla requiere que proporcionemos un objeto de formulario, necesitaremos crear uno.

¿No estás seguro de qué son los formularios de Django? Leer ChatGPT explicar esto -

Los formularios de Django son un módulo en el marco de trabajo de Django que se utiliza para crear y trabajar con formularios HTML. Proporcionan varias ventajas sobre el uso de formularios HTML simples:

  • Representación automática de HTML. Usted define una clase de formulario de Django y Django la representa como un formulario HTML.
  • Validación de datos. Los formularios de Django validan los datos enviados y los limpian antes de guardarlos.
  • Vinculación de datos a formularios. Puede vincular los datos existentes a un formulario para mostrar al usuario para su edición.

Cree un archivo llamado forms.py dentro del directorio de la aplicación del recomendador. Añádele el siguiente código.


 from django import forms class MovieSearchForm(forms.Form): imdb_rating = forms.DecimalField(min_value=0.1, max_value=9.9, required=True, label='Minimum IMDB Rating') release_year = forms.IntegerField(required=True)


Lo que acabamos de hacer es crear una clase de formulario para nuestro formulario de búsqueda de películas. Este formulario contendrá dos campos como se describe en la clase. Si quieres saber más sobre los formularios, echa un vistazo a esto .

Actualización de la vista de índice

Con todas las cosas requeridas para configurar las plantillas, ahora necesitamos actualizar nuestro método de vista para usar esta plantilla recién creada.


 from .forms import MovieSearchForm # We use a hard-code list here, we will make it dynamic in subsequent parts featured_movie_list = [ { "img_src": "https://images.thedirect.com/media/article_full/amazing-spider-man-3-andrew-garfield-movie-mcu.jpg", "img_alt": "...", "active": True }, { "img_src": "https://static1.colliderimages.com/wordpress/wp-content/uploads/2022/11/avatar-the-way-of-water-poster.jpg", "img_alt": "...", "active": False } ] def index(request): context = { "featured_movies": featured_movie_list, "form": MovieSearchForm() } return render(request, 'index.html', context)


Inicie su servidor y diríjase a localhost:8000 . Deberías ver la siguiente página.


Página de inicio de Flix-Finder


Datos IMDB de BrightData

Con todas las vistas, URL, plantillas y formularios en su lugar, ahora podemos considerar los datos con los que operará nuestra aplicación. Nuestro programa requeriría datos de múltiples agencias calificadoras (IMDB, para empezar).


Desafortunadamente, no existe una API bien definida a través de la cual podamos recuperar estos datos. Un método para obtener esta información es crear nuestros propios scrapers usando Python Selenium. Sin embargo, esto requeriría más trabajo y no todos se sienten cómodos con tales tecnologías.


Una mejor solución es usar servicios de terceros como BrightData. BrightData facilita la obtención de toda esta información.


Para esta primera parte, utilizaremos un conjunto de datos IMDB preseleccionado de BrightData. Este es uno de los muchos conjuntos de datos que están disponibles en BrightData. Así es como podemos conseguirlo.


(1) Regístrese para obtener una cuenta en BrightData.


(2) Vaya a brightdata.com/cp/datasets desde el navegador o abra el menú Datasets & WebScraper IDE desde la izquierda.

Conjuntos de datos y menú IDE de WebScraper en BrightData

(3) Vaya a Dataset Marketplace y busque IMDB media dataset .


(4) Haga clic en Ver conjunto de datos y descargue el conjunto de datos de muestra en formato CSV.


Una vez descargado, cambie el nombre del archivo a IMDB.csv y colóquelo dentro de la carpeta recommender/static . Este CSV de muestra contiene 28 atributos de IMDB para más de 1000 películas. Nuestra aplicación funcionará en este conjunto de datos IMDB para esta parte.

Actualización de la vista de índice para recibir un envío de formulario

Actualicemos el método de visualización para procesar las solicitudes de búsqueda.


Todas las solicitudes de búsqueda del formulario llegan como solicitudes POST. Después de confirmar que el formulario se completó correctamente, enumeraremos todas las películas del archivo CSV descargado y filtraremos aquellas que no coincidan con los criterios de filtro. Así es como se ve el código actualizado.


 def index(request): if request.method == 'POST': form = MovieSearchForm(request.POST) if form.is_valid(): movie_list = _getIMDBMovieDataList() filtered_movie_list = _filter_imdb_movie_list(movie_list, form) context = { "featured_movies": featured_movie_list, "form": MovieSearchForm(), "filtered_movie_list": filtered_movie_list, "no_result_error": len(filtered_movie_list)==0 } return render(request, 'index.html', context) context = { "featured_movies": featured_movie_list, "form": MovieSearchForm() } return render(request, 'index.html', context)


La implementación de los métodos _getIMDBMovieDataList y _filter_imdb_movie_list no es nada específico de Django y es solo Python puro. Por lo tanto, me salto hablar de eso aquí. El archivo views.py completo se puede encontrar aquí .

Producto final

Felicitaciones por llegar a este punto. Si ha seguido todos los pasos correctamente, debería poder ejecutar el servidor y realizar búsquedas a través de la interfaz de usuario. Así es como se verían los resultados de la búsqueda.


Página web que muestra el resultado de búsqueda para la calificación mínima de IMDB 8.0 y el año de lanzamiento 2022.


Código para esta serie

Todo el código creado como parte de esta serie estará disponible en este repositorio de GitHub. El resultado final de esta parte está contenido en esta rama llamada Part1 .


Siempre es una buena idea verificar su código con el presente en el repositorio para verificar si algo está mal.


Observaciones finales

Con esto, llegamos al final de la primera parte de esta serie de tres partes. En la siguiente parte, utilizaremos el IDE WebScraper de BrightData para recopilar datos de otras agencias calificadoras. Luego actualizaremos nuestro formulario, lo que permitirá a los usuarios realizar búsquedas más complejas.


¡También haremos que el componente Carrusel sea dinámico!


Hasta la próxima… Hasta entonces, ¡Feliz aprendizaje! 🙂