¿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 . Abra su editor de código favorito aquí. Debería ver los siguientes archivos en este directorio creados automáticamente por Django. flix_finder 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 proporcionada por Django. explicación ¡Intente ejecutar el servidor Django y acceder para asegurarse de que la configuración se haya completado correctamente! localhost:8000 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 . Para crear esta aplicación, ejecute el siguiente comando. recommender rishabh@my-ubuntu:~/projects/flix_finder$ python3 manage.py startapp recommender El comando anterior creará una nueva carpeta llamada . Toda la lógica de nuestra aplicación iría dentro de esta carpeta. recommender 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 presente en . INSTALLED_APPS 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 . Este método atendería las solicitudes que llegan a través de . Por ahora, este punto final simplemente devuelve un mensaje de saludo. recommender/views.py localhost:8000/ 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 . Aquí, especificamos esta correspondencia entre la URL y el método de vista. urls.py 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 a lo siguiente. flix_finder/urls.py 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 en su navegador. Deberías ver el mensaje de saludo. localhost:8000 ¡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 de directorio bajo el director . El nombre de esta carpeta recién creada es especial ya que Django busca por defecto archivos HTML en los directorios denominados . templates recommender templates Cree un nuevo archivo llamado dentro del directorio recién creado. Dentro de este archivo, escribiremos el HTML que queremos mostrar cuando los usuarios visiten . index.html 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): 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. (1) Utiliza el lenguaje de plantillas Django para permitir el uso de variables de Python directamente dentro del HTML. (2) Espera la variable en el contexto (datos pasados a la plantilla) y la usará para mostrar el carrusel. (3) featured_movies Espera que la variable se llene con un objeto de formulario de Django y lo usará para mostrar el formulario de búsqueda de películas. (4) form Espera la variable y la utilizará para mostrar los resultados de la búsqueda. (5) filtered_movie_list También espera la variable que indica si la búsqueda resultó en una respuesta vacía. (6) no_result_error También necesitaremos agregar algo de CSS para diseñar. Cree un directorio en el directorio . Esta carpeta contendrá todos los archivos estáticos. static recommender Cree un nuevo archivo llamado y pegue el CSS de . style.css 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 dentro del directorio de la aplicación del recomendador. Añádele el siguiente código. forms.py 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 . Deberías ver la siguiente página. localhost:8000 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. Regístrese para obtener una cuenta en BrightData. (1) Vaya a desde el navegador o abra el menú desde la izquierda. (2) brightdata.com/cp/datasets Datasets & WebScraper IDE Vaya a Dataset Marketplace y busque . (3) IMDB media dataset Haga clic en Ver conjunto de datos y descargue el conjunto de datos de muestra en formato CSV. (4) Una vez descargado, cambie el nombre del archivo a y colóquelo dentro de la carpeta . 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. IMDB.csv recommender/static 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 y no es nada específico de Django y es solo Python puro. Por lo tanto, me salto hablar de eso aquí. El archivo completo se puede encontrar . _getIMDBMovieDataList _filter_imdb_movie_list views.py 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. Código para esta serie Todo el código creado como parte de esta serie estará disponible en repositorio de GitHub. El resultado final de esta parte está contenido en rama llamada . este esta 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! 🙂