/PLM-Movie

Primary LanguagePython

영화 리뷰 커뮤니티 TeamProject

gif

프로젝트 소개

  • 🗓 프로젝트 기간
    • 2022.10.07
  • 💻 사용 기술
    • Python, Django, HTML, CSS, Bootstrap5
  • ⭐ 나의 역할
    • Django를 활용하여 CRUD기능을 구현함
    • Django모델 테이블을
  • 💡 배운 점
    • 전체적인 Django의 개발 흐름을 알게 되었습니다.
    • ModelForm과 부트스트랩을 활용하여 form을 만드는 방법과 ModelForm을 사용하면 view에서 따로 에러 메시지를 구성할 필요 없이 자동으로 한번 걸러 줄 수 있다는 것을 알게 되었습니다.
    • 이러한 서버 개발이 정말 새로운 것이 아니라 파이썬 파일로 이루어져 있다는 것을 다시 한번 인지하였고, 알고리즘을 공부하여야 하는 이유를 몸소 깨닫게 되었던 것 같습니다.

🚩목적

페어 프로그래밍을 통해 영화 리뷰 커뮤니티 서비스를 개발

  • ModelForm을 활용한 CRUD 구현
  • Staticfiles 활용

🧾기능 소개

create: 리뷰를 작성하는 ModelForm을 제공하고 ModelForm에서 request를 받아 처리하였습니다.

index: DB에 저장된 모든 리뷰들을 읽어서 간단한 정보를 사용자에게 보여줍니다.

detail: 선택한 리뷰의 제목, 내용 등 모든 정보를 보여줍니다.

update: 이미 작성된 리뷰 인스턴스를 가져와서 ModelForm을 제공하고 request를 처리합니다.

delete: 선택한 리뷰를 삭제 후 index로 redirect 합니다.

next: 지금 보고 있는 리뷰 바로 전에 작성된 글로 redirect 합니다.

prev: 지금 보고 있는 리뷰 바로 이후에 작성된 글로 redirect 합니다.

문제 해결

문제 상황

detail 페이지의 next, prev를 눌렀을 때 다음, 전 글로 이동하고 싶음

하지만 게시글을 삭제하고 다음 게시글을 써도 삭제된 게시글의 pk값이 채워지지 않음

따라서 현재pk + 1과 같이 단순하게 해결 불가능

해결

pk를 기준으로 오름차순으로 가져와서 pklist에 각 pk를 append한다.

while문 안에서 nextmin(pklist)보다 작아지면, prevmax(pklist)보다 커지면 현 상태 그대로를 return 한다.

만약 다음 또는 이전 pk값이 있다면 그 pk값을 return으로 넘겨준다.

def next(request, pk):
    movies = Movie.objects.order_by('-pk')
    movie = Movie.objects.get(pk=pk)
    pklist = []
    for m in movies:
        pklist.append(m.pk)
    nextpk = movie.pk
    small = min(pklist)
    while 1:
        nextpk -= 1
        # 1번 조건
        # nextpk가 small보다 작아지면
        if nextpk < small:
            return redirect("movies:detail", movie.pk)
        # 2번 조건
        # 지금 pk값에서 1을 빼서 만약에 있으면 값을 저장하고 종료
        elif nextpk in pklist:
            return redirect("movies:detail", nextpk)


def prev(request, pk):
    movies = Movie.objects.order_by('-pk')
    movie = Movie.objects.get(pk=pk)
    pklist = []
    for m in movies:
        pklist.append(m.pk)
    large = max(pklist)
    prevpk = movie.pk
    while 1:
        prevpk += 1
        # 1번 조건
        # 마지막 pk값보다 커지면 break
        if prevpk > large:
            return redirect("movies:detail", movie.pk)
        # 2번 조건
        # 지금 pk값에서 1을 더해서 만약에 있으면 값을 저장하고 종료
        elif prevpk in pklist:
            return redirect("movies:detail", prevpk)