[Django3.0]パスワード変更ページの作成

Djangoで用意されているPasswordChangeFormを使います。
PasswordChangeFormはログインユーザのみに使えます。

urls.py

urlpatterns = [
    //
    path('password', views.password, name='password'),
    path('password/complete', views.password_complete, name='password_complete'),
]

template
nameは、old_password、new_password1、new_password2を使用

<form action="/password/complete" method="POST">
		{% csrf_token %}
		- 現行パスワード<br>
		<input type="password" name="old_password" maxlength="128" placeholder="パスワードを入力してください" required><br>
		- 新しいパスワード<br>
		<input type="password" name="new_password1" maxlength="128" placeholder="パスワードを入力してください" required><br>
		- 新しいパスワード再入力<br>
		<input type="password" name="new_password2" maxlength="128" placeholder="パスワードを入力してください" required><br><br>
		
		<button type="submit" class="btn btn-success">更新</button>
	</form>

views.py

from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm

@login_required(login_url='/login/')
def password(request):
	user = request.user
	params = {
		'form': PasswordChangeForm(user),
	}
	return render(request, 'myapp/password.html', params)

@login_required(login_url='/login/')
def password_complete(request):
	user = request.user
	if(request.method == 'POST'):
		form = PasswordChangeForm(user=request.user, data=request.POST or None)
		if form.is_valid():
			form.save()
			update_session_auth_hash(request, form.user)
			return render(request, 'myapp/password_complete.html')
		else:
			params = {
				'message': ''
			}
			return render(request, 'myapp/password.html', params)
	return render(request, 'myapp/password_complete.html')

OK
次は最後、user削除。
これが終われば、auth機能は一通りカバー