inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

auth앱의 PasswordChangeForm 커스텀을 통한 암호 수정 구현

PasswordChangeForm 재정의 관련 질문

해결된 질문

324

zxpjh0323

작성한 질문수 3

1

안녕하세요 강사님,

PasswordChangeForm 을 재정의 하는 부분에서 질문이 있어 글 남깁니다.

1. PasswordChangeForm은 SetPasswordForm을 상속받기 때문에 clean_new_password2를 오버라이딩하여 해당 함수가 기존 대로 실행 될때 단순히 old_password와 같은지 비교하는 로직을 추가한게 맞나요?

2. clean_new_password2를 오버라이딩 할 때, super().clean_new_password2()를 하지 않고 self.cleaned_data.get('new_password2')를 하게 기존의 pw1==pw2 확인하는 로직이 사라져 버리기 때문에 문제가 생기는 것이 맞나요? (실험결과 new_pw1, new_pw2 를 다르게 넣으면 new_pw1 으로 변경이 됩니다). 즉 super()... 를 적어줘야 기존 로직을 지킬 수 있는 것이죠?

3. clean_new_password1은 새로운 함수를 정의한 것인데  clean_ 이 앞에 붙었기 때문에 PasswordChangeForm의 로직이 동작할 때 무조건 해당 함수가 실행이 되는 것이 맞나요? 이 함수가 실행되는 시점이 궁금합니다.

감사합니다.

react docker python django

답변 1

2

이진석

안녕하세요.

1. 그렇습니다. // PasswordChangeForm은 SetPasswordForm을 상속받은 상태이죠. SetPasswordForm은 SetPasswordForm에서 정의한 필드들에 대한 유효성 검사의 책임이 있으며, PasswordChangeForm은 SetPasswordForm에 정의된 필드들에 대한 유효성 검사에 대해서는 책임을 질 필요가 없습니다. PasswordChangeForm은 PasswordChangeForm에서 정의한 필드들에 대해서만 유효성 검사를 수행하는 거죠.

2. 그렇습니다. // 부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의할 때에는, 부모의 로직을 그대로 지키면서 자식의 로직을 이어갈 수도 있고, 부모의 로직을 무시하고 자식의 로직만 수행할 수도 있습니다. 이 경우에는 부모의 로직을 그대로 지키면서 자식의 로직을 이어갈려는 것이기에 부모의 clean_new_password2를 호출해준 것입니다.

3. 장고 Form에서는 유효성 검사 시에 clean_필드명 메서드가 있다면, 호출해줍니다. 관련 장고 코드는 아래에서 확인하실 수 있습니다. 차근차근 호출순서를 따라가보시며 호출시점을 확인하실 수 있습니다.

https://github.com/django/django/blob/4.0.6/django/forms/forms.py#L447

유효성 검사 실행 시점에 대해서는 <Form Validation> 에피소드에서 자세하게 다룬 바 있으니 다시 참고해보시면 좋을 듯 합니다.

화이팅입니다. :-)

ps. 질문이 해결되셨다면, 본 질문의 상태를 해결됨으로 변경 부탁드립니다.

안녕하세요.

0

48

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

272

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

useEffect에서 변수 업데이트 관련 질문

0

381

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

266

1

bootstrap4

0

470

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

362

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

572

3

useState는 필수일까요?

0

261

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

596

4

Django allauth를 사용한 소셜 로그인 시 에러

0

654

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

552

2

useLocalStorage() 함수 사용여부

0

228

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

447

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

897

2

docker compose 를 통한 배포 관련 오류 문의

0

670

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

364

1

is_like_user

0

233

1

related_name 오류

0

272

1

re_path 오류

0

258

1

re_path url

0

249

1

No post matches the given query

0

659

2