본문 바로가기
기타/django

작정하고 장고 - UpdateView, DeleteView

by 방배킹 2023. 5. 13.

UpdateView를 이용한 비밀번호 변경 구현

먼저 views.py에 UpdateView를 만들어준다.

class AccountUpdateView(UpdateView):
    model = User
    form_class = AccountUpdateForm
    success_url = reverse_lazy('accountapp:hello_world')
    template_name = 'accountapp/Update.html'

여기서 form_class에 UserCreationForm를 사용해도 되지만 UserCreationForm를 사용할 경우 아이디도 변경이 가능해져서 아이디 변경을 막기 위해 AccountUpdateForm을 새로 만들어준다.

class AccountUpdateForm(UserCreationForm):
    def __init__(self,*arge,**kwargs):
        super().__init__(*arge,**kwargs)

        self.fields['username'].disabled = True

UserCreationForm를 상속하는 AccountUpdateForm을 만들어준다

self.fields['username'].disabled = True 를 통해서 아이디 변경을 막아준다.

Mypage 버튼을 누르면 비밀번호를 변경할 수 있는 Change Info를 만들어준다.

{% extends 'base.html' %}
{% load bootstrap4 %}

{% block content %}

  <div style="text-align: center; max-width: 500px; margin: 4rem auto">
    <div class="mb-4">
      <h4>Change Info</h4>
    </div>
    <form action="{% url 'accountapp:update' pk=user.pk %}" method="post">
      {% csrf_token %}
      {% bootstrap_form form %}
      <input type="submit" class="btn btn-dark rounded-pill col-6 mt-3">
    </form>
  </div>

{% endblock %}

DeleteView 기반 회원 탈퇴 구현

마찬가지로 views.py에 DeleteView를 만들어 준다.

class AccountDeleteView(DeleteView):
    model = User
    success_url = reverse_lazy('accountapp:login')
    template_name = 'accountapp/delete.html'

마찬가지로 delete.html을 만들어준다.

{% extends 'base.html' %}
{% load bootstrap4 %}

{% block content %}

  <div style="text-align: center; max-width: 500px; margin: 4rem auto">
    <div class="mb-4">
      <h4>Quit</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 %}

댓글