본문 바로가기
Programming/Django

[MINTime 프로젝트] 영화 추천, 리뷰 사이트 개발 회고록 - 5 (managers)

by IN.0 2020. 6. 25.
728x90
반응형

ROOT 게시물은 이쪽 ↓

https://in0-pro.tistory.com/29

 

[MINTime 프로젝트] 영화 추천, 리뷰 사이트 개발 회고록 - ROOT

SSAFY 1학기 최종 프로젝트로 '영화 추천, 리뷰 사이트' 개발을 했다. 모두에게 동일한 주제가 주어졌기 때문에 자유 주제보다는 명세가 확실하여 편했다. 기본 조건은 영화 추천 알고리즘이 존재�

in0-pro.tistory.com


 

관리 페이지는 기본적으로 스태프 권한을 가진 유저만 접근할 수 있다.

스태프가 아닌 유저가 관리자 페이지를 접근하면 뜨는 페이지

 

관리자 메인 페이지

네비게이션에 있는 '관리' 탭으로 접근하면 위와 같이 영화 관리 / 회원 관리로 나뉘어 있다.

두 버튼에는 css와 js를 이용하여 mouseover하면 멋진(??) 효과가 나타나게 구성하였다.

 

영화 관리 페이지

영화 관리는 위와 같이 구성되어 있다.

제목을 클릭하면 영화 상세정보 페이지로 넘어간다.

(영화 상세정보 페이지에도 스태프는 수정, 삭제 버튼이 있다.)

삭제 버튼을 누르면 경고창이 뜬다.

삭제 경고

 

영화 생성과 수정은 게시물 생성, 수정처럼 같은 폼을 공유한다.

영화 생성 폼

프로젝트 전체 페이지 중에 이 페이지에 시간을 가장 많이 쏟았다.

장르 부분은 처음엔 선택한 것이 저장도 안되고 세로로 정렬되어있어 스크롤이 부담이 됐는데,

아래와 같은 코드를 이용하여 보완하였다.

해당 app forms.py에 추가
inline-block을 이용하여 가로로 정렬한다.

 

수정 form은 이 코드도 있어야 원래 가진 장르도 보여준다.

update의 경우에는 원래 가진 장르가 문자열로 저장되어있기 때문에 체크가 되어있지 않았다.

views.py에서 장르 문자열을 리스트로 가공하여 hiddenGenres id를 가진 div 안에 담은 후

그것을 js에서 꺼내어 해당 장르에 직접 체크해준다.

이 과정이 매우 귀찮았기 때문에 다음에 할 때에는 장르를 문자열 저장이 아닌 외래키로 연동하여

모델링해야겠다는 생각을 했다.

 

언어는 표준 표기법 2자로 표기해야 하기 때문에 국가코드를 조회하는 사이트를 따로 버튼으로 만들어두었다.

개봉일은 처음에 2020, 2021, 2022... 이렇게 미래의 날짜만 있길래 아래와 같이 커스텀하였다.

forms.py SelectDateWidget 활용

 

포스터 검색과 배경 검색은 Daum 이미지 검색 API를 사용했다.

제목이 입력되어있을 경우, 저 버튼을 누르면 해당 제목으로 이미지 검색한 창을 새로 띄워준다.

('기생충'이 제목이라면 포스터 검색은 '기생충 영화 포스터'라고 검색되고, 배경 검색은 '기생충 영화'로 이루어진다.)

'기생충' 포스터 검색 결과

그리고 이미지 중 하나를 클릭하면 해당 이미지 주소를 부모 페이지(form) 쿠키에 담고,

자기 자신은 close한다.

 

그리고 작성 후 제출 버튼을 누르면 form에 담긴 데이터와 쿠키에 있는 데이터를 views.py에서 처리(save)한다.

 

이제 회원 관리를 살펴보자.

회원 관리

'스태프로' 버튼을 누르면 해당 유저에게 스태프 권한을 줄 수 있고,

반대로 '일반회원으로'를 누르면 강등이 가능하다.

admin 계정은 건드릴 수 없다.

작동하는 방식을 아래와 같다.

is_staff 사용

views.py 코드는 위와 같고, 클릭 시 비동기 처리되기 때문에 js 코드도 따로 존재한다.

 

활성화/ 비활성화는 is_staff 대신 is_active를 사용하면 된다.

비활성화 회원이 되면 로그인이 안되고, 사실상 탈퇴 처리와 유사하게 구현하는 것이 목적이었다.

 

다음 챕터에서는 premium, kakaopay app을 살펴보자.

728x90
반응형

댓글