paint-brush
Flix-Finder: Xây dựng ứng dụng đề xuất phim với Django và BrightData [Phần 1/3]by@infinity
3,319
3,319

Flix-Finder: Xây dựng ứng dụng đề xuất phim với Django và BrightData [Phần 1/3]

Rishabh Agarwal9m2023/06/22
Read on Terminal Reader

Ứng dụng Django sẽ cho phép người dùng lọc phim dựa trên xếp hạng từ một số cơ quan xếp hạng. Chúng tôi sẽ sử dụng các dịch vụ của BrightData để lấy dữ liệu cần thiết cho ứng dụng của chúng tôi. Hãy bắt đầu xây dựng Flix-Finder bằng cách cài đặt Django và thiết lập dự án Django của chúng ta.
featured image - Flix-Finder: Xây dựng ứng dụng đề xuất phim với Django và BrightData [Phần 1/3]
Rishabh Agarwal HackerNoon profile picture

Bạn đã bao giờ đấu tranh để quyết định xem chương trình truyền hình hoặc bộ phim nào tiếp theo chưa? Đưa ra quyết định về lần xem say sưa tiếp theo của bạn chưa bao giờ là điều dễ dàng vì có rất nhiều tùy chọn có thể truy cập trên các nhà cung cấp dịch vụ phát trực tuyến khác nhau.


Khi quyết định chọn bộ phim tiếp theo của mình, chúng tôi chủ yếu dựa vào đánh giá và xếp hạng từ một số cơ quan xếp hạng (như IMDB). Tuy nhiên, việc chọn xếp hạng nào để tin tưởng có thể khó khăn do có quá nhiều tổ chức này.


Phải nói rằng, việc xem một bộ phim đã nhận được điểm tốt từ một số tổ chức này thường sẽ an toàn hơn. Nhưng tìm một bộ phim như vậy có khó không? Vâng, đúng vậy!


Trong loạt ba blog này, chúng tôi sẽ tạo ra một giải pháp phần mềm để giải quyết vấn đề chính xác này! Ứng dụng Django này, mà chúng tôi sẽ gọi là Flix-Finder, sẽ cho phép người dùng lọc phim dựa trên xếp hạng từ một số cơ quan xếp hạng.


Chúng tôi sẽ sử dụng các dịch vụ của BrightData để lấy dữ liệu cần thiết cho ứng dụng của chúng tôi.


Vì vậy, không cần phải chần chừ thêm nữa, hãy bắt đầu xây dựng Flix-Finder.

Thiết lập ứng dụng

Trước khi bắt đầu với phần này, hãy đảm bảo rằng Django đã được cài đặt trong hệ thống của bạn!


Lệnh sau sẽ hoạt động nếu Django được cài đặt trong hệ thống của bạn.

python3 -m django --version


Sử dụng pip để cài đặt Django nếu nó chưa được cài đặt trong hệ thống của bạn!

python3 -m pip install Django


Hãy để chúng tôi bắt đầu bằng cách thiết lập dự án Django của chúng tôi. Tạo một dự án mới bằng cách sử dụng lệnh sau.


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


Thay đổi thư mục thành thư mục dự án mới tạo flix_finder . Mở trình chỉnh sửa mã yêu thích của bạn tại đây. Bạn sẽ thấy các tệp sau trong thư mục này do Django tự động tạo.


 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


Để biết thêm về các tệp này, hãy tham khảo giải thích này do Django cung cấp.


Hãy thử chạy máy chủ Django và truy cập localhost:8000 để đảm bảo rằng quá trình thiết lập đã được hoàn tất đúng cách!


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

Tạo một ứng dụng mới và Chế độ xem đầu tiên của chúng tôi

Ứng dụng Django (hoặc ứng dụng Django) đề cập đến một thành phần của dự án Django lớn hơn gói gọn một tính năng hoặc chức năng riêng lẻ. Ứng dụng Django là các thành phần độc lập và có thể tái sử dụng. Chúng bao gồm các mô hình, dạng xem, mẫu, thử nghiệm và các tệp khác.

Tất cả logic của người giới thiệu cho dự án của chúng tôi sẽ nằm trong một ứng dụng có tên là recommender . Để tạo ứng dụng này, hãy chạy lệnh sau.


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


Lệnh trên sẽ tạo một thư mục mới có tên là recommender . Tất cả logic của ứng dụng của chúng tôi sẽ nằm trong thư mục này.


Còn một bước nữa trước khi chúng ta có thể nói rằng ứng dụng của chúng ta đã được tạo thành công. Hãy tiếp tục và thêm tên của ứng dụng mới tạo vào danh sách INSTALLED_APPS có trong 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' ]


Với điều này, chúng tôi đã tạo thành công ứng dụng recommender của mình.


Bây giờ, chúng ta hãy tạo chế độ xem đầu tiên.


Trong Django, chế độ xem là các hàm Python nhận yêu cầu HTTP và trả về phản hồi HTTP. Lượt xem đóng một vai trò quan trọng trong việc trình bày dữ liệu cho người dùng dựa trên một số logic nghiệp vụ.


Tạo một phương thức mới trong recommender/views.py . Phương thức này sẽ phục vụ các yêu cầu đến qua localhost:8000/ . Hiện tại, điểm cuối này chỉ trả về một thông báo xin chào.


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


Chúng tôi đã tạo phương thức xem để xử lý yêu cầu, nhưng chúng tôi chưa chỉ định (trong dự án của mình) điểm cuối nào tương ứng với chế độ xem này. Chúng tôi làm điều này trong các tệp urls.py


Tạo một tệp mới bên trong ứng dụng đề xuất và đặt tên là urls.py . Ở đây, chúng tôi chỉ định sự tương ứng này giữa URL và phương thức xem.


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


Bây giờ chúng ta cần làm cho Django biết về tệp của URL mới này. Cập nhật tệp flix_finder/urls.py thành tệp sau.


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


Khởi động máy chủ của bạn, nếu chưa, và mở localhost:8000 trên trình duyệt của bạn. Bạn sẽ thấy tin nhắn xin chào.


Xin chào tin nhắn từ ứng dụng Recommender của chúng tôi!


Xin chúc mừng, bạn vừa hoàn thành việc tạo chế độ xem đầu tiên của mình!

Hãy để chúng tôi sử dụng các mẫu…

Hãy để chúng tôi đồng ý… gửi một chuỗi dưới dạng phản hồi không phải là điều thú vị nhất. Thay vào đó, chúng ta nên gửi một phản hồi HTML thích hợp. Và với mục đích chính xác này, chúng tôi sẽ sử dụng Mẫu Django.


Tạo một templates thư mục dưới giám đốc recommender . Tên của thư mục mới được tạo này rất đặc biệt vì Django mặc định tìm kiếm các tệp HTML trong các thư mục có tên là templates .


Tạo một tệp mới có tên index.html bên trong thư mục vừa tạo. Bên trong tệp này, chúng tôi sẽ viết HTML mà chúng tôi muốn hiển thị khi người dùng truy cập localhost:8000 .


Vì viết HTML không phải là trọng tâm chính ở đây nên tôi sẽ bỏ qua việc giải thích phần đó và bạn chỉ cần sao chép HTML từ đây .


Dưới đây là một số điều bạn cần biết về tệp HTML này (hoặc mẫu Django) -


(1) HTML này hiển thị bốn nội dung trên trang web - Thanh điều hướng, Băng chuyền, Biểu mẫu tìm kiếm phim và Kết quả tìm kiếm phim.


(2) Nó sử dụng ngôn ngữ mẫu Django để cho phép sử dụng các biến Python trực tiếp bên trong HTML.


(3) Nó mong đợi biến featured_movies trong ngữ cảnh (dữ liệu được chuyển đến mẫu) và sẽ sử dụng nó để hiển thị băng chuyền.


(4) Nó mong muốn biến form được lấp đầy bằng đối tượng Biểu mẫu Django và sẽ sử dụng nó để hiển thị Biểu mẫu tìm kiếm phim.


(5) Nó mong đợi filtered_movie_list và sẽ sử dụng nó để hiển thị kết quả tìm kiếm.


(6) Nó cũng mong đợi biến no_result_error cho biết liệu tìm kiếm có dẫn đến phản hồi trống hay không.


Chúng tôi cũng sẽ cần thêm một số CSS để tạo kiểu. Tạo một thư mục static trong thư mục recommender . Thư mục này sẽ chứa tất cả các tệp tĩnh.


Tạo một tệp mới có tên style.css và dán CSS từ URL này .


Với điều này, chúng tôi có tất cả HTML và CSS cần thiết. Tiếp theo, chúng ta cần tạo biểu mẫu Tìm kiếm phim.

Tạo biểu mẫu tìm kiếm phim

Vì mẫu của chúng tôi yêu cầu chúng tôi cung cấp một đối tượng biểu mẫu nên chúng tôi sẽ cần tạo một đối tượng.

Bạn không chắc Biểu mẫu Django là gì? Đọc ChatGPT giải thích điều này -

Các biểu mẫu Django là một mô-đun trong khung Django được sử dụng để tạo và làm việc với các biểu mẫu HTML. Chúng cung cấp một số lợi thế so với việc sử dụng các biểu mẫu HTML đơn giản:

  • Tự động kết xuất HTML. Bạn định nghĩa một lớp biểu mẫu Django và Django hiển thị nó dưới dạng biểu mẫu HTML.
  • Xác thực dữ liệu. Biểu mẫu Django xác thực dữ liệu đã gửi và làm sạch dữ liệu đó trước khi lưu.
  • Liên kết dữ liệu với các biểu mẫu. Bạn có thể liên kết dữ liệu hiện có với một biểu mẫu để hiển thị cho người dùng chỉnh sửa.

Tạo một tệp có tên là forms.py bên trong thư mục ứng dụng của người giới thiệu. Thêm đoạn mã sau vào nó.


 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)


Những gì chúng tôi vừa làm là tạo một lớp biểu mẫu cho Biểu mẫu tìm kiếm phim của chúng tôi. Biểu mẫu này sẽ chứa hai trường như được mô tả trong lớp. Nếu bạn muốn biết thêm về các biểu mẫu, hãy xem phần này .

Cập nhật Chế độ xem Chỉ mục

Với tất cả những thứ cần thiết cho mẫu được thiết lập, bây giờ chúng tôi cần cập nhật phương thức xem của mình để sử dụng mẫu mới được tạo này.


 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)


Khởi động máy chủ của bạn và đi tới localhost:8000 . Bạn sẽ thấy trang sau.


Trang chủ của Flix-Finder


Dữ liệu IMDB từ BrightData

Với tất cả các chế độ xem, URL, mẫu và biểu mẫu đã có, giờ đây chúng ta có thể xem xét dữ liệu mà ứng dụng của chúng ta sẽ hoạt động trên đó. Chương trình của chúng tôi sẽ yêu cầu dữ liệu từ nhiều cơ quan xếp hạng (IMDB, để bắt đầu).


Thật không may, không có API được xác định rõ ràng để chúng tôi có thể truy xuất dữ liệu này. Một phương pháp để có được thông tin này là tạo trình dọn dẹp của riêng chúng tôi bằng Python Selenium. Tuy nhiên, điều này sẽ đòi hỏi nhiều công việc hơn và không phải ai cũng cảm thấy thoải mái với những công nghệ như vậy.


Một giải pháp tốt hơn là sử dụng các dịch vụ của bên thứ ba như BrightData. BrightData giúp bạn dễ dàng có được tất cả thông tin này.


Đối với phần đầu tiên này, chúng tôi sẽ sử dụng bộ dữ liệu IMDB được tuyển chọn trước từ BrightData. Đây là một trong nhiều bộ dữ liệu có sẵn trên BrightData. Đây là cách chúng ta có thể có được nó.


(1) Đăng ký tài khoản trên BrightData.


(2) Truy cập brightdata.com/cp/datasets từ trình duyệt hoặc mở menu Datasets & WebScraper IDE từ bên trái.

Menu Bộ dữ liệu & WebScraper IDE trên BrightData

(3) Truy cập Dataset Marketplace và tìm kiếm IMDB media dataset .


(4) Nhấp vào Xem tập dữ liệu và tải xuống tập dữ liệu mẫu ở định dạng CSV.


Sau khi tải xuống, hãy đổi tên tệp thành IMDB.csv và đặt tệp vào trong thư mục recommender/static . CSV mẫu này chứa 28 thuộc tính IMDB cho hơn 1000 phim. Ứng dụng của chúng tôi sẽ hoạt động trên bộ dữ liệu IMDB này cho phần này.

Cập nhật Chế độ xem Chỉ mục để Nhận Biểu mẫu Gửi

Hãy để chúng tôi cập nhật phương thức xem để xử lý các yêu cầu tìm kiếm.


Tất cả các yêu cầu tìm kiếm từ biểu mẫu đến dưới dạng yêu cầu POST. Sau khi xác nhận rằng biểu mẫu đã được điền chính xác, chúng tôi sẽ liệt kê tất cả phim từ tệp CSV đã tải xuống và lọc ra những phim không phù hợp với tiêu chí lọc. Đây là cách mã được cập nhật.


 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)


Việc triển khai các phương thức _getIMDBMovieDataList_filter_imdb_movie_list không có gì cụ thể đối với Django và chỉ là Python thuần túy. Do đó tôi bỏ qua nói về điều đó ở đây. Bạn có thể tìm thấy toàn bộ tệp views.py tại đây .

Sản phẩm cuối cùng

Chúc mừng bạn đã đạt đến điểm này. Nếu bạn đã thực hiện đúng tất cả các bước, bạn sẽ có thể chạy máy chủ và thực hiện tìm kiếm thông qua giao diện người dùng. Đây là cách kết quả tìm kiếm sẽ trông như thế nào.


Trang web hiển thị kết quả tìm kiếm cho Xếp hạng IMDB tối thiểu 8.0 và Năm phát hành 2022.


Mã cho sê-ri này

Tất cả mã được tạo như một phần của loạt bài này sẽ có sẵn trên kho lưu trữ GitHub này . Kết quả cuối cùng của phần này được chứa trong nhánh này có tên Part1 .


Bạn luôn nên kiểm tra chéo mã của mình với mã hiện có trên repo để kiểm tra xem có gì sai không.


Kết luận

Với điều này, chúng ta đi đến phần cuối của phần đầu tiên của loạt bài gồm ba phần này. Trong phần tiếp theo, chúng tôi sẽ sử dụng IDE WebScraper của BrightData để thu thập dữ liệu từ các cơ quan xếp hạng khác. Sau đó, chúng tôi sẽ cập nhật biểu mẫu của mình, do đó cho phép người dùng thực hiện các tìm kiếm phức tạp hơn.


Chúng tôi cũng sẽ làm cho thành phần Carousel trở nên năng động!


Hẹn gặp lại bạn lần sau… Đến lúc đó, Chúc bạn học tập vui vẻ! 🙂