출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

이전에는 PasswordResetView / PasswordResetDoneView / PasswordResetConfirmView / PasswordResetCompleteView 를 통해 간단하게 구현해냈다. 또한, 아이디를 까먹었을 때 이메일로 아이디를 보내주는 것을 구현하기도 했었다. 그렇다면 이번에는 로그인 된 상태에서 비밀번호를 바꾸는 것을 한번 구현해보도록 하겠다.

해당 부분은 여기에서 찾아볼 수 있다.


urls.py 수정하기

from django.urls import path
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
    ...
    path('change_password/', auth_views.PasswordChangeView.as_view(), name="password_change"),
    path('password_change_done/', auth_views.PasswordChangeDoneView.as_view(), name="password_change_done"),
    ...
    ]

urls.py에 다음과 같은 두 path를 추가해준다. 이는 기존에 Django에서 제공해주는 Authentication Views를 사용하는 것으로, 조금 ugly한 html template을 불러오지만, 우리가 지금 하려는 목적에는 알맞는 것이라 그대로 사용하도록 하겠다. (물론 다른 template을 사용하고 싶다면 as_view()의 괄호 안에 template_name='app/...' 과 같은 형식을 쓸 수 있다.)

또한, 우리가 가지고 있던 기존의 계정 template에 다음과 같은 버튼을 추가해주자:

<div class="card card-body">
    <a class="btn btn-primary" href="{% url 'password_change' %}">Change Password</a>
</div>


password_change로 사용하는 이유는 우리가 urls.py에서 name을 그렇게 정의했기 때문이다. 우리가 이미 로그인된 상태로, 이 '계정 화면'의 이 버튼을 누르게 된다면, 다음과 같은 화면으로 넘어가게 된다:


앞서 얘기했듯이, 이 template을 바꾸려고 한다면, 다른 html template을 스스로 만들어서 사용하는 방법이 있다. 다음으로, 우리가 이 화면에 정의된 input box들에 제대로 입력하고 CHANGE MY PASSWORD 버튼을 누른다면, 또 다음과 같은 화면을 볼 수 있다:


이 화면도 우리가 따로 정의하면 다른 예쁜 화면으로 꾸밀 수 있다.

간단하게 사용자의 기존 비밀번호를 바꾸는 방법에 대해서 알아보았다. 다음 포스틷이 될 Password Change 구현하기 - (2) 에서는 Django의 기본 Authentication Views를 사용하지 않는, 모두 manually 해보는 것을 해보도록 하겠다.