"""
이 스크립트를 실행하기 전에 다음 단계를 따라주세요:
1. Python 가상환경 생성 및 활성화:
- Windows:
python -m venv .venv
.venv\Scripts\activate
- Mac/Linux:
python3 -m venv .venv
source .venv/bin/activate
2. 필요한 패키지 설치:
프로젝트 루트의 DRF-Backend 디렉토리에서:
pip install -r requirements.txt
3. 데이터 파일 준비:
- 프로젝트 루트에 'dataset' 폴더 생성
- 'dataset' 폴더에 'revised_df.csv' 파일 위치
4. 데이터베이스 마이그레이션:
python manage.py migrate
5. 스크립트 실행:
python -m movies.import_movies
"""
import os
import sys
# 프로젝트 루트를 sys.path에 추가하여 import 문제를 방지합니다.
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
# Django 설정 모듈을 지정합니다.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings")
import django
django.setup()
from movies.models import Movie
import csv
from datetime import datetime
def import_movies(file_path):
try:
with open(file_path, "r", encoding="utf-8") as file:
reader = csv.DictReader(file)
count = 0
for row in reader:
try:
Movie.objects.create(
id=row["id"],
title=row["title"],
revenue=row["revenue"],
vote_average=row["vote_average"],
imdb_id=row["imdb_id"],
original_title=row["original_title"],
overview=row["overview"],
popularity=row["popularity"],
genres=row["genres"],
poster_path=row["poster_path"],
keywords=row["keywords"],
)
count += 1
except Exception as e:
print(
f"Error importing movie {row.get('title', 'unknown')}: {str(e)}"
)
print(f"Successfully imported {count} movies")
except FileNotFoundError:
print(f"Error: Could not find the CSV file at {file_path}")
print("Please make sure the CSV file exists in the dataset directory")
sys.exit(1)
except Exception as e:
print(f"Error reading the CSV file: {str(e)}")
sys.exit(1)
if __name__ == "__main__":
# 프로젝트 루트 디렉토리 기준으로 상대 경로 설정
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
csv_file_path = os.path.join(project_root, "dataset", "revised_df.csv")
print(f"Looking for CSV file at: {csv_file_path}")
import_movies(csv_file_path)
from movies.models import Movie
저희는 movies라는 app에 있는 Movie 모델을 쓸 거예요.
for row in reader:
try:
Movie.objects.create(
id=row["id"],
title=row["title"],
revenue=row["revenue"],
vote_average=row["vote_average"],
imdb_id=row["imdb_id"],
original_title=row["original_title"],
overview=row["overview"],
popularity=row["popularity"],
genres=row["genres"],
poster_path=row["poster_path"],
keywords=row["keywords"],
)
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
import random
from .models import Movie
from .serializers import SignupMovieListSerializer
"""랜덤한 영화 리스트 25개 보여주는 코드"""
class SignUpMovieListView(APIView):
def get(self, request):
# 평점 내림차순으로 정렬하고 수익이 3억 달러 이상인 영화 100개 필터링
top_movies = Movie.objects.filter(revenue__gte=300000000).order_by(
"-vote_average")[:100] # 수익이 3억 달러 이상인 영화 중 상위 100개 선택
# 100개 중 랜덤으로 25개 선택
random_movies = list(top_movies) # 쿼리셋을 리스트로 변환
random_selection = random.sample(
random_movies, min(25, len(random_movies))
) # 랜덤으로 25개 영화 선택
# 선택된 영화들을 직렬화
serializer = SignupMovieListSerializer(random_selection, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
"""회원가입 시, 보여지는 영화 포스터 리스트 및 장르"""
class SignupMovieListSerializer(serializers.ModelSerializer):
class Meta:
model = Movie
fields = ['id', 'original_title', 'poster_path']
read_only_fields = ['id']
Postman
프런트가 없어서 postman의 존재가 너무 감사해요 ㅠㅠㅠㅠ 으흐흑
일단 저희가 제작한 서비스는 로그인을 해야 접근이 가능해서
Headers에 Authorization - Bearer로 토큰을 집어넣어 줘요.
그러고 url을 movie/movielist/로 들어가서 Send를 해주면,
movie-id, original_title, poster_path로 총 25개 랜덤으로 보여줍니다!