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機能は一通りカバー