여름의 서재

[Django] Auth 정복하기(3)_Update & Delete 본문

Skill/Django

[Django] Auth 정복하기(3)_Update & Delete

엉아_ 2021. 9. 26. 18:54
728x90

📄 유저 시나리오

- Update (회원정보수정)

1. 회원정보 수정 버튼을 누른다.

2. 기존의 데이터와 함께 회원정보 수정 폼이 담긴 update 페이지가 나온다.

3. 정보를 수정하고 체줄 버튼을 누른다.

4. 정상적으로 수정이 완료되면 메인 페이지로 이동한다.

 

- delete (회원탈퇴)

1. 회원 탈퇴 버튼을 누른다.

2. 로그아웃 된채로 메인페이지로 이동한다.

 

🔨 기능 구현하기

1) urls

: accounts앱에 update, delete라는 이름의 주소 생성

from django.urls import path
from . import views

app_name = 'accounts'
urlpatterns = [
    path('login/', views.login, name='login'),
    path('logout/', views.logout, name='logout'),
    path('signup/', views.signup, name='signup'),
    path('delete/', views.delete, name='delete'),
    path('update/', views.update, name='update'),
]

 

 

2) views

 

- Update

  • GET: 정보 수정 폼이 담긴 페이지를 응답
  • POST: 사용자 정보 받아서 유효성 검사 후 정보수정
from django.contrib.auth.forms import UserChangeForm, 

def update(request):
    if request.method == 'POST':
        form = UserChangeForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('articles:index')
    else:
        form = UserChangeForm(instance=request.user)
    context = {
        'form': form,
    }
    return render(request, 'accounts/update.html', context)

 

UserChangeForm

: 유저의 정보를 수정하는 장고 내장 폼

 

 

- Delete

  • POST: 유저 정보 제거, 세션 제거
@require_POST
def delete(request):
    if request.user.is_authenticated:
        request.user.delete()
        auth_logout(request)
    return redirect('articles:index')

 

 

3) templates

 

- Update

: 정보 수정 폼이 담긴 페이지

{% extends 'base.html' %}

{% block content %}
  <h1>회원정보수정</h1>
  <form action="{% url 'accounts:update' %}" method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
  </form>
{% endblock content %}

 

 

4) forms

: UserChangeForm을 수정한 CustomUserChangeForm 생성

from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth import get_user_model


class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = get_user_model()
        fields = ('email', 'first_name', 'last_name',)
Comments