인프런 커뮤니티 질문&답변

이광현님의 프로필 이미지

작성한 질문수

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

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

passwordChangeForm을 FBV로 하면 안되나요?

작성

·

152

0

안녕하세요 선생님 휴일인데 죄송합니다.

저는  강의를 듣기전에 미리 한번 먼저 해보고 하는 방식으로 공부중입니다.

다만 로그인이나  프로필 수정쪽은 FBV를 사용해서 직접 구현을 하셔서  이번 비밀번호 변경도 FBV로 구현을 하겠구나 생각하고 AUTH앱의 PasswordChangeForm과  FBV로 구현해보고 강의를 수강하였습니다. 

선생님께서는 CBV로 구현을 하셔서 질문드립니다.

CBV와 FBV를 다양하게  쓰는 예를 보여주시려고 사용하신건가요?

아니면 CBV는 AUTH앱의 passwordchangeVIew를 가져오면  기능들이 갖춰져 있기 때문에 편리하고 더 효율적이기 때문에  사용하신건가요?

아니면 그냥 아래 처럼 맞는지는 모르겠지만  함수로 구현해도 상관은 없는건가요?

처음 질문이라 좀 요점이  없는것 같은데 죄송합니다. 

@login_required
def password_change(request):
    if request.method == 'POST':
        form = ChangeForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request,"비밀번호 변경 성공")
    else:
        form = ChangeForm()
    return render(request,"accounts/password_change_form.html",{'form':form,})
 

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

장고의 뷰는 Callable Object입니다. 이를 함수(FBV)로 구현하셔도 되고 클래스(CBV)로 구현하셔도 됩니다. 모두 많이 사용하는 방법입니다. CBV로 구현하실 경우 중복 로직의 재사용성읖 높이실 수 있습니다. 그래서 장고 기본앱에서 많은 뷰가 CBV로 구현이 되어있는 것이구요.

직접 구현하실 경우 FBV로 구현하셔도 무방합니다. 단 장고 기본앱 auth 앱의 PasswordChangeView / Form에서 처리하고 있는 API는 똑같이 호출해주세요. 단순히 Form 처리 이외에 세션 처리를 하는 로직도 있으니깐요.

PasswordChangeView에서는 form valid 시에 아래의 api를 호출해주고 있습니다.

# Updating the password logs out all other sessions for the user except the current one.
update_session_auth_hash(self.request, form.user)

화이팅입니다. :-)