[Django] 비 SPA 방식으로 장고 Forms/Views를 적극 활용한 인스타그램 St 만들기#6_auth앱의 PasswordChangeForm 커스텀을 통한 암호 수정 구현

아직·2022년 7월 12일
0
post-thumbnail

1)

@login_required
def password_change(request):
    
class PasswordChangeView(LoginRequiredMixin, AuthPasswordChangeView):    
    pass

password_change = PasswordChangeView.as_view()

urls.py에 as_view로 바로 정의해줄 수 있었지만, 커스터마이징을 위해 views.py까지 넘어왔다.

@login_required 장식자를 사용한 함수뷰를 만드는 대신 LoginRequiredMixin과 PasswordChangeView를 모두 상속하는 클래스뷰의 인스턴스 함수를 생성하는 방법을 택했다.

2)

class PasswordChangeView(PasswordContextMixin, FormView):
    form_class = PasswordChangeForm
    success_url = reverse_lazy("password_change_done")
    template_name = "registration/password_change_form.html"
    title = _("Password change")

깃헙에서는 클래스에 정의될 수 있는 요소들을 확인할 수 있다.

3)

class PasswordChangeForm(AuthPasswordChangeForm):
    def clean_new_password2(self)
        old_password = self.cleaned_data.get('old_password')
        new_password2 = super().clean_new_password2()
        if old_password == new_password2:
            raise forms.ValidationError("새로운 암호와 기존 암호가 달라야 합니다.")
        return new_password2 

암호 변경 시 기존 암호와 새 암호가 다르게 설정을 하고 싶다. 상속한 클래스에 이미 clean_new_password2가 있음을 알고 있어서 여기서 반환된 값을 적극적으로 사용했다.

new_password1을 위한 부모 클래스의 해당 함수는 없었다.

0개의 댓글