[WatchaPedia Clone] Day 4-5. Archive, Review views.py 구현

모델링 - models.py 구성 - User/View (회원가입, 로그인), User/Utils (액세스 토큰 확인 데커레이터) 까지 구성한 후 본격적으로 각 기능에 대한 views.py를 구성 과정에 들어왔다.

Archive

Archive 앱은 크게 '별점 평가 기능(Rating)', '아카이브 기능(Archive)' 기능으로 분리하였다. 각 기능에 대한 플로우를 간략하게 정리하면

Archive

  • 각 유저는 각 영화에 대해 보고싶어요, 보는 중, 관심없어요 중 하나의 타입을 선택할 수 있음
  • 유저-영화가 매칭되어 특정 타입으로 Archive에 저장되어 있는 경우, 다른 타입의 Archive를 저장할 경우 기존의 타입에서 수정됨

Rating

  • 각 유저는 각 영화에 대한 별점 평가가 가능
  • 기존 Archive에서 보고싶어요, 보는 중이 표시된 상태에서 별점을 평가할 경우, Archive에서 보고싶어요, 보는 중이 해제됨
  • Archive에서 관심없어요가 표시된 경우 별점을 평가하더라도, Archive에서 관심없어요가 해제되지 않음
  • Rating 평가가 된 상태에서 Archive의 보고싶어요, 보는 중, 관심없어요를 누르더라도 Rating에 영향을 미치지 않음

Archive와 Rating은 서로 영향을 주고받는 관계가 일부 있으나, 독립적으로 값을 가지고 있어야 하므로 별도의 models와 view로 구성했다.

[Rating: post 기능 구현]

@id_auth
def post(self, request, content_pk):
    try:
        data    = json.loads(request.body)
        user    = request.user
        content = Content.objects.get(id=content_pk)
        rating  = data['rating']

        if Rating.objects.filter(user = user, content = content).exists():
            return JsonResponse({"message": "ALREADY_EIXST"}, status = 400)

        Rating.objects.create(user = user, content = content, rating = rating)
        return JsonResponse({"message": "SUCCESS"}, status = 201)

    except json.JSONDecodeError as e:
        return JsonResponse({"message": f"{e}"}, status = 400)
    except KeyError:
        return JsonResponse({"message": "KEY_ERROR"}, status = 400)

로그인한 유저가 Rating 점수를 평가하는 과정은 request 과정에서 url에 영화 PK값을 넣어 어떤 영화에 대한 rating을 수행하는지 지칭하고, body에 구체적인 별점 정보를 넣어 호출하면 데이터를 받아 넣도록 구성했다.


작성 중

좋은 웹페이지 즐겨찾기