Haben Sie schon einmal darüber nachgedacht, welche Fernsehsendung oder welchen Film Sie als nächstes ansehen möchten? Die Entscheidung für Ihren nächsten Binge-Watch zu treffen, ist nie einfach, da bei verschiedenen Streaming-Anbietern so viele Optionen verfügbar sind. Bei der Entscheidung für unseren nächsten Film verlassen wir uns in erster Linie auf Rezensionen und Bewertungen verschiedener Ratingagenturen (wie IMDB). Angesichts der Fülle dieser Institutionen könnte es jedoch schwierig sein, sich für ein Rating zu entscheiden, an das man glauben soll. Allerdings ist es oft sicherer, einen Film anzusehen, der von mehreren dieser Organisationen gute Noten erhalten hat. Aber ist es nicht schwierig, einen solchen Film zu finden? Ja ist es! In dieser dreiteiligen Blogserie werden wir eine Softwarelösung entwickeln, um genau dieses Problem zu lösen! Diese Django-Anwendung, die wir Flix-Finder nennen werden, würde es ihrem Benutzer ermöglichen, Filme basierend auf Bewertungen mehrerer Ratingagenturen zu filtern. Wir werden die Dienste von BrightData nutzen, um die erforderlichen Daten für unsere Anwendung abzurufen. Beginnen wir also ohne weitere Umschweife mit der Entwicklung von Flix-Finder. Einrichten der Anwendung Bevor Sie mit diesem Abschnitt beginnen, stellen Sie sicher, dass Django auf Ihrem System installiert ist! Der folgende Befehl sollte funktionieren, wenn Django auf Ihrem System installiert ist. python3 -m django --version Verwenden Sie pip, um Django zu installieren, wenn es nicht auf Ihrem System installiert ist! python3 -m pip install Django Beginnen wir mit der Einrichtung unseres Django-Projekts. Erstellen Sie mit dem folgenden Befehl ein neues Projekt. rishabh@my-ubuntu:~/projects$ python3 -m django startproject flix_finder Wechseln Sie das Verzeichnis in das neu erstellte Projektverzeichnis . Öffnen Sie hier Ihren bevorzugten Code-Editor. In diesem Verzeichnis sollten Sie die folgenden Dateien sehen, die automatisch von Django erstellt wurden. 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 Weitere Informationen zu diesen Dateien finden Sie in dieser von Django. Erklärung Versuchen Sie, den Django-Server auszuführen und auf zuzugreifen, um sicherzustellen, dass die Einrichtung ordnungsgemäß abgeschlossen wurde! localhost:8000 rishabh@my-ubuntu:~/projects/flix_finder$ python3 manage.py runserver Erstellen einer neuen App und unsere erste Ansicht Eine Django-App (oder Django-Anwendung) bezieht sich auf eine Komponente eines größeren Django-Projekts, die ein einzelnes Feature oder eine einzelne Funktionalität kapselt. Django-Apps sind wiederverwendbare und unabhängige Komponenten. Sie bestehen aus Modellen, Ansichten, Vorlagen, Tests und anderen Dateien. Die gesamte Empfehlungslogik für unser Projekt würde sich in einer Anwendung namens befinden. Führen Sie den folgenden Befehl aus, um diese App zu erstellen. recommender rishabh@my-ubuntu:~/projects/flix_finder$ python3 manage.py startapp recommender Mit dem obigen Befehl wird ein neuer Ordner mit dem Namen erstellt. Die gesamte Logik unserer Anwendung würde in diesem Ordner abgelegt werden. recommender Es bleibt noch ein weiterer Schritt, bevor wir sagen können, dass unsere Anwendung erfolgreich erstellt wurde. Fahren Sie fort und fügen Sie den Namen der neu erstellten App in die Liste unter ein. 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' ] Damit haben wir unsere App erfolgreich erstellt. recommender Lassen Sie uns nun unsere erste Ansicht erstellen. In Django sind Ansichten Python-Funktionen, die HTTP-Anfragen empfangen und HTTP-Antworten zurückgeben. Ansichten spielen eine wichtige Rolle bei der Darstellung von Daten für Benutzer basierend auf einer Geschäftslogik. Erstellen Sie eine neue Methode unter . Diese Methode würde Anfragen bearbeiten, die über eingehen. Im Moment gibt dieser Endpunkt lediglich eine Hallo-Nachricht zurück. recommender/views.py localhost:8000/ from django.http import HttpResponse def index(request): return HttpResponse("Hello From Recommender!") Wir haben die Ansichtsmethode zur Bearbeitung der Anfrage erstellt, aber wir haben (in unserem Projekt) nicht angegeben, welche Endpunkte dieser Ansicht entsprechen. Wir tun dies in den Dateien. urls.py Erstellen Sie in der Empfehlungs-App eine neue Datei und nennen Sie sie . Hier spezifizieren wir diese Entsprechung zwischen der URL und der Ansichtsmethode. urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index") ] Wir müssen Django nun auf die Datei dieser neuen URL aufmerksam machen. Aktualisieren Sie die Datei wie folgt. flix_finder/urls.py from django.urls import path, include urlpatterns = [ path('', include("recommender.urls")), path('admin/', admin.site.urls), ] Starten Sie Ihren Server, falls noch nicht geschehen, und öffnen Sie in Ihrem Browser. Sie sollten die Hallo-Nachricht sehen. localhost:8000 Herzlichen Glückwunsch, Sie haben gerade Ihre erste Ansicht erstellt! Lassen Sie uns Vorlagen verwenden ... Wir sind uns einig, dass das Senden einer Zeichenfolge als Antwort nicht gerade die coolste Sache ist. Stattdessen sollten wir eine richtige HTML-Antwort senden. Und genau zu diesem Zweck werden wir Django-Vorlagen verwenden. Erstellen Sie ein unter dem . Der Name dieses neu erstellten Ordners ist besonders, da Django standardmäßig in den Verzeichnissen mit dem Namen nach HTML-Dateien sucht. templates recommender templates Erstellen Sie im neu erstellten Verzeichnis eine neue Datei mit dem Namen . In diese Datei schreiben wir den HTML-Code, den wir rendern möchten, wenn Benutzer besuchen. index.html localhost:8000 Da das Schreiben von HTML hier nicht im Vordergrund steht, überspringe ich die Erläuterung dieses Teils und Sie können den HTML-Code einfach von kopieren. hier Hier sind einige Dinge, die Sie über diese HTML-Datei (oder Django-Vorlage) wissen müssen: Dieser HTML-Code zeigt vier Dinge auf der Webseite an: Navigationsleiste, Karussell, Filmsuchformular und Filmsuchergebnisse. (1) Es verwendet die Django-Vorlagensprache, um die Verwendung von Python-Variablen direkt im HTML zu ermöglichen. (2) Es erwartet die Variable im Kontext (an die Vorlage übergebene Daten) und verwendet sie zur Anzeige des Karussells. (3) featured_movies Es wird erwartet, dass die mit einem Django-Formularobjekt gefüllt wird, und es wird zur Anzeige des Filmsuchformulars verwendet. (4) form Es erwartet die Variable und verwendet sie, um die Suchergebnisse anzuzeigen. (5) filtered_movie_list Es wird außerdem die Variable erwartet, die angibt, ob die Suche zu einer leeren Antwort geführt hat. (6) no_result_error Wir müssen auch etwas CSS für das Styling hinzufügen. Erstellen Sie ein Verzeichnis unter dem . Dieser Ordner enthält alle statischen Dateien. static recommender Erstellen Sie eine neue Datei mit dem Namen und fügen Sie das CSS von ein. style.css dieser URL Damit verfügen wir über das gesamte erforderliche HTML und CSS. Als nächstes müssen wir das Filmsuchformular erstellen. Erstellen des Filmsuchformulars Da unsere Vorlage die Bereitstellung eines Formularobjekts erfordert, müssen wir eines erstellen. Sie sind sich nicht sicher, was Django-Formulare sind? Lesen Sie ChatGPT und erklären Sie dies - Django-Formulare sind ein Modul im Django-Framework, das zum Erstellen und Arbeiten mit HTML-Formularen verwendet wird. Sie bieten mehrere Vorteile gegenüber der Verwendung einfacher HTML-Formulare: Automatisches Rendern von HTML. Sie definieren eine Django-Formularklasse und Django rendert sie als HTML-Formular. Validierung von Daten. Django-Formulare validieren die übermittelten Daten und bereinigen sie vor dem Speichern. Daten an Formulare binden. Sie können vorhandene Daten an ein Formular binden, um sie dem Benutzer zur Bearbeitung anzuzeigen. Erstellen Sie eine Datei mit dem Namen im App-Verzeichnis des Empfehlungsgebers. Fügen Sie den folgenden Code hinzu. 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) Wir haben gerade eine Formularklasse für unser Filmsuchformular erstellt. Dieses Formular enthält zwei Felder, wie in der Klasse beschrieben. Wenn Sie mehr über Formulare erfahren möchten, schauen Sie sich an. hier Aktualisieren der Indexansicht Nachdem alle für die Vorlagen erforderlichen Dinge festgelegt sind, müssen wir jetzt unsere Ansichtsmethode aktualisieren, um diese neu erstellte Vorlage zu verwenden. 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) Starten Sie Ihren Server und gehen Sie zu . Sie sollten die folgende Seite sehen. localhost:8000 IMDB-Daten von BrightData Nachdem alle Ansichten, URLs, Vorlagen und Formulare vorhanden sind, können wir nun die Daten berücksichtigen, mit denen unsere Anwendung arbeiten wird. Unser Programm würde Daten von mehreren Ratingagenturen erfordern (zunächst IMDB). Leider gibt es keine genau definierte API, über die wir diese Daten abrufen können. Eine Methode, diese Informationen zu erhalten, besteht darin, mit Python Selenium eigene Scraper zu erstellen. Dies würde jedoch mehr Arbeit erfordern, und nicht jeder ist mit solchen Technologien vertraut. Eine bessere Lösung ist die Nutzung von Drittanbieterdiensten wie BrightData. BrightData macht es einfach, all diese Informationen zu erhalten. Für diesen ersten Teil verwenden wir einen vorkuratierten IMDB-Datensatz von BrightData. Dies ist einer der vielen Datensätze, die auf BrightData verfügbar sind. So können wir es bekommen. Eröffnen Sie ein Konto bei BrightData. (1) Gehen Sie entweder im Browser zu oder öffnen Sie das Menü auf der linken Seite. (2) brightdata.com/cp/datasets Datasets & WebScraper IDE Gehen Sie zum Dataset Marketplace und suchen Sie nach . (3) IMDB media dataset Klicken Sie auf „Datensatz anzeigen“ und laden Sie den Beispieldatensatz im CSV-Format herunter. (4) Benennen Sie die Datei nach dem Herunterladen in um und platzieren Sie sie im Ordner . Diese Beispiel-CSV enthält 28 IMDB-Attribute für über 1000 Filme. Unsere Anwendung wird für diesen Teil mit diesem IMDB-Datensatz arbeiten. IMDB.csv recommender/static Aktualisieren der Indexansicht zum Empfangen einer Formularübermittlung Lassen Sie uns die Ansichtsmethode aktualisieren, um Suchanfragen zu verarbeiten. Alle Suchanfragen aus dem Formular kommen als POST-Anfragen an. Nachdem wir bestätigt haben, dass das Formular ordnungsgemäß ausgefüllt ist, werden wir alle Filme aus der heruntergeladenen CSV-Datei auflisten und diejenigen herausfiltern, die nicht den Filterkriterien entsprechen. So sieht der aktualisierte Code aus. 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) Die Implementierung der Methoden und ist nichts Django-spezifisches, sondern reines Python. Ich verzichte daher darauf, hier darüber zu sprechen. Die gesamte Datei finden Sie . _getIMDBMovieDataList _filter_imdb_movie_list views.py hier Endprodukt Herzlichen Glückwunsch, dass Sie diesen Punkt erreicht haben. Wenn Sie alle Schritte ordnungsgemäß ausgeführt haben, sollten Sie in der Lage sein, den Server auszuführen und Suchvorgänge über die Benutzeroberfläche durchzuführen. So würden die Suchergebnisse aussehen. Code für diese Serie Der gesamte im Rahmen dieser Serie erstellte Code wird in GitHub-Repository verfügbar sein. Das Endergebnis dieses Teils ist in Zweig mit dem Namen enthalten. diesem diesem Part1 Es ist immer eine gute Idee, Ihren Code mit dem im Repo vorhandenen Code zu vergleichen, um festzustellen, ob etwas nicht stimmt. Abschließende Bemerkungen Damit sind wir am Ende des ersten Teils dieser dreiteiligen Serie angelangt. Im nächsten Teil werden wir die WebScraper-IDE von BrightData verwenden, um Daten von anderen Ratingagenturen zu sammeln. Anschließend werden wir unser Formular aktualisieren, sodass Benutzer komplexere Suchen durchführen können. Wir werden auch die Karussellkomponente dynamisch gestalten! Bis zum nächsten Mal ... Bis dahin viel Spaß beim Lernen! 🙂