from django.contrib.auth.hashers import check_password
class CheckPasswordForm(forms.Form): password = forms.CharField(label='비밀번호', widget=forms.PasswordInput( attrs={'class': 'form-control',}), ) def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user
def clean(self): cleaned_data = super().clean() password = cleaned_data.get('password') confirm_password = self.user.password if password: if not check_password(password, confirm_password): self.add_error('password', '비밀번호가 일치하지 않습니다.')
현재 접속중인 사용자의 password를 가져오기 위해 init 메소드로 user 객체를 생성하고 clean 메소드로 form에 입력된 password 값과 init으로 생성된 현재 사용자의 password 값을 django에서 제공하는 check_password를 통해 비교합니다.
로그인하지 않은 사용자의 접근을 막기 위해 decorator를 추가하고 form에서 비밀번호 인증을 위한 user객체를 생성하기 위해 request.user로 현재 사용자를 form에 담아 템플릿에 뿌려줍니다. is_valid가 통과되면 delete()로 DB에서 현재 user를 삭제하고 logout()을 통해 세션을 만료시킵니다.
3. urls.py 작성
생성한 회원탈퇴 view를 연결하기 위해 urls.py의 urlpatterns에 아래의 path를 추가합니다.