0:8000/films?genre=드라마&country=미국&time=100
어제 활용한 코드를 활용하여 첫 페이지의 세 줄을 구현하였다.
/films/main
으로 되어 있다.localhost:8000/films/main
main
을 추가 하였으나, 이를 제외하라는 피드백을 받았다.endpoint
를 만들 때는 항상 자원(데이터) 기준으로 만들어야 하기 때문이다./films/main
이 아닌 /films
로 수정했다.사실 어제 만든 코드를 재활용 한 거기에, 불필요하게 코드가 길어졌다...
지금은 양이 적으니 상관 없으나 유지, 보수 차원에서 너무 비효율적이다.
이게 무슨 일이니
class FilmView(View):
def get(self, request):
try:
genre = request.GET.get('genre')
country = request.GET.get('country')
running_time_min = int(request.GET.get('time'))
genre_of_films = Film.objects.filter(genres__name = genre)
country_of_films = Film.objects.filter(countries__name = country)
min_below_hundred = Film.objects.filter(running_time_min__lte = running_time_min)
results = {
'drama' : [{
'id' : film.id,
'name' : film.name,
'release_date' : film.release_date.year,
'image_url' : film.image_url,
'country' : [country.name for country in film.countries.all()],
'running_time_min' : film.running_time_min,
} for film in genre_of_films[:10]],
'america' : [{
'id' : film.id,
'name' : film.name,
'release_date' : film.release_date.year,
'image_url' : film.image_url,
'country' : [country.name for country in film.countries.all()],
'running_time_min' : film.running_time_min,
} for film in country_of_films[:10]],
'running_time_below_hundred' : [{
'id' : film.id,
'name' : film.name,
'release_date' : film.release_date.year,
'image_url' : film.image_url,
'country' : [country.name for country in film.countries.all()],
'running_time_min' : film.running_time_min,
} for film in min_below_hundred[:10]]
}
return JsonResponse({'results': results}, status = 201)
except KeyError:
return JsonResponse({'message': 'KEY_ERROR'}, status = 400)
q 객체
를 활용하면 된다는데, 아직 쓸 줄 모르니 답답하다...localhost:8000/films/main?genre=드라마&country=미국&running_time_min=100