1. 회원가입 과정은 아래를 참고합시다.
https://mummur.tistory.com/77?category=1080492
2. 로그인과 로그아웃 구현은 아래를 참고합시다.
https://mummur.tistory.com/78?category=1080492
3. 회원 탈퇴
# accounts/urls.py
urlpatterns = [
...
path("delete/", views.delete, name="delete"),
path("update/", views.update, name="update"),
path("password/", views.password, name="password"),
]
# accounts/views.py
@require_POST
# 회원 탈퇴의 과정은 삭제 후 로그아웃이다.
def delete(request):
if request.user.is_authenticated:
request.user.delete()
auth_logout(request)
return redirect('movies:index')
4. 회원 정보 수정
#accounts/forms.py
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = get_user_model()
fields = ('username',)
class CustomUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = get_user_model()
fields = UserCreationForm.Meta.fields
# fields를 지정하지 않으면 너무 많은 정보가 노출된다!
#accounts/views.py
from django.contrib.auth.decorators import login_required
@login_required
@require_http_methods(["POST", "GET"])
def update(request):
if request.method == "POST":
form = CustomUserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
return redirect("movies:index")
else:
form = CustomUserChangeForm(instance = request.user)
context = {
'form':form,
}
return render(request, 'accounts/update.html', context)
# accounts/templates/update.html
{% extends 'base.html' %}
{% load bootstrap5 %}
{% block content %}
<h1>회원 정보 수정</h1>
<form action="{% url 'accounts:update' %}" method="POST">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="수정하기" class="btn btn-primary btn-sm">
</form>
{% endblock content %}
5. 비밀번호 수정
# accounts/views.py
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
@login_required
@require_http_methods(["GET", "POST"])
def password(request):
if request.method == "POST":
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
return redirect("movies:index")
else:
form = PasswordChangeForm(request.user)
context = {
'form':form,
}
return render(request, 'accounts/change_password.html', context)
- 비밀번호를 변경한 직후, 로그인이 유지되어야 하기 때문에 hash를 update하는 과정이 필요하다!!
# accounts/templates/change_password.html
{% extends 'base.html' %}
{% load bootstrap5 %}
{% block content %}
<h1>비밀번호 변경</h1>
<form action="{% url 'accounts:change_password' %}" method="POST">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" class="btn btn-primary btn-sm">
</form>
{% endblock content %}
Uploaded by N2T