- 🗓 프로젝트 기간
- 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문 안에서 next
는 min(pklist)
보다 작아지면, prev
는 max(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)