DeleteView
를 이용하여 사용자의 계정을 삭제하기위한 MTV
를 구현해보고 활용해 볼게요.
AccountDeleteView를 선언하고 DeleteView를 상속받을거에요.
내부 변수는 model, success_url, template_name으로 각각 둘거에요.
딱히 어려운 부분은 없조?
class AccountDeleteView(DeleteView): # DeleteView를 임포트하는것 잊지마세요.
model = User
success_url = reverse_lazy('accountapp:login')
template_name = 'accountapp/delete.html'
본인에게 해당하는 pk값을 받아야 하므로 <int:pk>를 삭제하는 url에도 첫번째 인자로 설정해줍니다.
view에서 정의한 AccountDeleteView를 2번째인자로 설정하여 url로 호출시 실행되도록 할게요.
#생략
from accountapp.views import hello_world, AccountCreateView, AccountDetailView, AccountUpdateView, AccountDeleteView
app_name = 'accountapp'
urlpatterns = [
# 생략
path('delete/<int:pk>/', AccountDeleteView.as_view(), name='delete'),
]
delete.html을 만들어 볼게요.
특이한 것은 없고 form태그와 csrf_token, input 태그 정도만 있을 뿐이에요.
하지만 계정 삭제가 이루어지는만큼 소홀히 만들 수 없겠조?
{% extends 'base.html' %}
{% block content %}
<div style="text-align: center; max-width: 500px; margin: 4rem auto;">
<div class="mb-4">
<h4>Delete</h4>
</div>
<form action="{% url 'accountapp:delete' pk=user.pk %}" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-danger rounded-pill col-6 mt-3">
</form>
</div>
{% endblock %}
기존 작성한 detail.html에 계정 삭제 버튼을 만들어 볼게요.
아래 부분을 if문 안에 넣어주면 되요.
<a href="{% url 'accountapp:delete' pk=user.pk %}">
<p>Delete</p>
</a>`
{% extends 'base.html' %}
{% block content %}
<div>
<div style="text-align: center; max-width: 500px; margin: 4rem auto;">
<p>
{{target_user.date_joined}}
</p>
<h2 style="font-family: 'NanumSquareB'">
{{target_user.username}}
</h2>
{% if target_user == user %}
<a href="{% url 'accountapp:update' pk=user.pk %}">
<p>Update Profile</p>
</a>
<a href="{% url 'accountapp:delete' pk=user.pk %}">
<p>Delete</p>
</a>
{% endif %}
</div>
</div>
{% endblock %}