# PJT 06 : 사용자 인증기반 웹 서비스 구현 ## 단계별 구현 과정 ### Community App #### Model - `movie_title`, `title`, `content`, `rank` 필드를 가진 모델을 생성했습니다. - `created_at`과 `updated_at` 필드를 추가했습니다. #### Form - Django의 ModelForm을 사용해 ReviewForm을 생성했습니다. - 다음과 같은 위젯을 추가해, 별점은 1~5점만 선택할 수 있게 했습니다. ```python class ReviewForm(forms.ModelForm): rank = forms.IntegerField( widget=forms.NumberInput( attrs={ 'min': 1, 'max': 5, 'type': 'number', } ) ) class Meta: model = Review fields = '__all__' ``` #### Admin - Review 모델을 관리자 페이지에 등록했습니다. #### URL - 주어진 url 조건대로 설정했습니다. #### View & Template - base.html을 확장하여 사용했고, - UX를 고려해 navbar와 header는 따로 분리하여 작성했습니다. - 현재 페이지의 위치에 따라 navbar의 요소가 활성화되도록 했습니다. - User Authentication과 관련된 요소는 navbar 오른쪽에 위치하도록 했습니다. <br> - 사용자 인증 여부과 관계 없이 Home화면은 노출됩니다. - **사용자가 인증되어 있지 않으면**, 로그인 및 회원가입 페이지가 노출되며 해당 페이지로 이동할 수 있습니다. ![](https://i.imgur.com/9H1BIms.png) <br> - **사용자가 인증되어 있을 경우** 새로운 리뷰를 작성할 수 있는 버튼, 로그아웃 및 정보 변경 페이지 버튼이 노출됩니다. ![](https://i.imgur.com/pHwqtJF.png) <br> - index 페이지 및 detail 페이지에는 평점 (rank)가 별의 개수로 시각화되도록 표현했습니다. ![](https://i.imgur.com/uBKsMmz.png) ### Accounts App #### Views - Login - AuthenticationForm을 사용했습니다. - 로그인 되지 않은 사용자가 `@login_required`에 의해 로그인 페이지로 왔을 경우, 로그인 후 next 쿼리문 뒤에 있는 url로 이동시켰습니다. - Logout - auth_logout으로 로그아웃 시키고 index 페이지로 이동시켰습니다. - Signup - UserCreationForm을 사용했습니다. - Update - 회원 정보 수정은 현재 로그인된 사용자 자신만 가능해기 때문에 `@login_required`를 사용했습니다. - 일반 사용자가 접근할 수 있는 필드를 지정하기 위해 CustomUserChangeForm을 새로 만들어, fields 속성을 만들었습니다. ```python class CustomUserChangeForm(UserChangeForm): class Meta: model = get_user_model() fields = ('first_name', 'last_name', 'email') ``` - Change Password - PasswordChangeForm을 사용했습니다. - 비밀번호 수정은 현재 로그인된 사용자 자신만 가능해기 때문에 `@login_required`를 사용했습니다. - Delete - DB에서 사용자 정보를 삭제하고 auth_logout으로 로그아웃시켰습니다. <br> #### Templates - 정보 변경 페이지를 다음과 같이 구성했습니다. ![](https://i.imgur.com/lgLXPJB.png) - 비밀번호 변경 페이지를 다음과 같이 구성했습니다. ![](https://i.imgur.com/HpksWZN.png) - 계정 삭제 버튼을 누를 경우 확인 메세지가 나오도록 했습니다. ![](https://i.imgur.com/d3nmDrA.png) <br> ## 학습 내용 및 소감 ### 채연희 :ice_cream: - branch, PR 등 git의 기능을 두루 사용해볼 수 있었습니다. - django CRUD를 빠르게 복습할 수 있어서 좋았습니다. - 장고 authentication이 잘 와닿지 않았는데, 성재님 덕분에 쉽게 완성했습니다. - UX를 고려하며 레이아웃과 CSS를 설계해나가는 연습을 했습니다. - django 전반적인 흐름을 복습할 수 있었지만, 막상 백지 상태에서 작성하려면 어려움이 있을 것 같습니다. 월말평가에 대비한 공부가 필요할 것 같습니다. - 프로젝트에 많은 것을 시도해봤는데, 성재님께서 잘 따라주시고 좋은 의견을 많이 제시해주셔서 결과물이 만족스럽게 나온 것 같습니다. ### 이성재 :cake: - git commit 메시지를 상세하게 적는게 힘들었습니다. - django CRUD가 이제 익숙해진 것 같습니다. 뿌듯합니다. - CSS를 많이 까먹었는데 연희님 따라서 또 복습하게 되었습니다. - 연희님이 놓칠 수 있는 부분들까지 세세하게 잡아주셔서 멋있는 결과물이 나왔습니다.