Django는 회원 관리와 관련된 기능을 효율적으로 구현할 수 있도록 다양한 도구와 메소드를 제공합니다. 이번 글에서는 Django를 활용해 회원가입, 회원탈퇴, 정보 수정, 비밀번호 변경 기능을 단계적으로 구현해보겠습니다.
1. 회원가입 구현
기본 개념
Django는 기본적으로 auth.User
모델을 제공하며, 이를 기반으로 한 UserCreationForm
을 사용하여 회원가입 기능을 간단히 구현할 수 있습니다.
코드 구현
accounts/views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
def signup(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user) # 가입 후 자동 로그인
return redirect("index")
else:
form = UserCreationForm()
context = {"form": form}
return render(request, "accounts/signup.html", context)
|
accounts/templates/accounts/signup.html
1
2
3
4
5
6
7
8
9
10
11
12
|
{% extends "base.html" %}
{% block content %}
<h1>회원가입</h1>
<form action="{% url 'accounts:signup' %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">회원가입</button>
</form>
{% endblock %}
|
base.html
1
2
3
|
<a href="{% url 'accounts:signup' %}">회원가입</a>
|
2. 회원탈퇴 구현
기본 개념
회원탈퇴는 User
객체를 삭제하여 구현할 수 있습니다. Django의 delete()
메소드를 호출하여 사용자를 데이터베이스에서 제거합니다.
코드 구현
accounts/urls.py
1
2
3
4
5
6
7
| from django.urls import path
from . import views
app_name = "accounts"
urlpatterns = [
path("delete/", views.delete, name="delete"),
]
|
accounts/views.py
1
2
3
4
5
6
7
8
9
10
| from django.contrib.auth import logout as auth_logout
from django.views.decorators.http import require_POST
from django.shortcuts import redirect
@require_POST
def delete(request):
if request.user.is_authenticated:
request.user.delete()
auth_logout(request) # 세션 삭제
return redirect("index")
|
base.html
1
2
3
4
5
6
|
<form action="{% url 'accounts:delete' %}" method="POST">
{% csrf_token %}
<input type="submit" value="회원탈퇴">
</form>
|
3. 정보 수정 구현
기본 개념
기본 UserChangeForm
을 사용해 사용자의 정보를 수정할 수 있습니다. 필요에 따라 이를 상속받아 커스텀 폼을 만들어 사용할 수 있습니다.
코드 구현
1
2
3
4
5
6
7
| 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 = ("username", "email", "first_name", "last_name")
|
accounts/views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| from django.views.decorators.http import require_http_methods
from .forms import CustomUserChangeForm
@require_http_methods(["GET", "POST"])
def update(request):
if request.method == "POST":
form = CustomUserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
return redirect("index")
else:
form = CustomUserChangeForm(instance=request.user)
context = {"form": form}
return render(request, "accounts/update.html", context)
|
accounts/templates/accounts/update.html
1
2
3
4
5
6
7
8
9
10
11
12
|
{% extends "base.html" %}
{% block content %}
<h1>회원정보수정</h1>
<form action="{% url 'accounts:update' %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">수정하기</button>
</form>
{% endblock %}
|
base.html
1
2
3
|
<a href="{% url 'accounts:update' %}">회원정보수정</a>
|
4. 비밀번호 변경 구현
기본 개념
PasswordChangeForm
을 활용하여 사용자가 비밀번호를 변경할 수 있습니다. 비밀번호를 변경하면 기존 세션이 무효화되므로, update_session_auth_hash
를 사용해 새로운 세션 인증을 갱신할 수 있습니다.
코드 구현
accounts/urls.py
1
2
3
| urlpatterns = [
path("password/", views.change_password, name="change_password"),
]
|
accounts/views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required
@login_required
@require_http_methods(["GET", "POST"])
def change_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("index")
else:
form = PasswordChangeForm(request.user)
context = {"form": form}
return render(request, "accounts/change_password.html", context)
|
accounts/templates/accounts/change_password.html
1
2
3
4
5
6
7
8
9
10
11
12
|
{% extends "base.html" %}
{% block content %}
<h1>비밀번호 변경</h1>
<form action="{% url 'accounts:change_password' %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">비밀번호 변경</button>
</form>
{% endblock %}
|
결론
이번 글에서는 Django의 기본 기능을 활용해 회원관리 기능을 구현해 보았습니다. Django의 강력한 인증 시스템을 통해 간단하면서도 안전한 회원 관리 기능을 구축할 수 있습니다.