Django는 강력하고 유연한 웹 프레임워크로, Python으로 작성된 웹 애플리케이션을 신속하게 개발할 수 있게 도와줍니다. 본 글에서는 Django를 사용하여 사용자 인증 시스템을 구축하는 방법, 즉 회원가입, 로그인, 비밀번호 재설정 기능을 구현하는 방법을 자세히 설명합니다.
1. Django 프로젝트 설정
먼저 Django 프로젝트를 생성하고 기본적인 설정을 진행해야 합니다.
1.1. Django 설치
시스템에 Django를 설치하려면 다음 명령어를 사용합니다:
pip install django
1.2. 프로젝트 생성
Django 프로젝트를 생성하는 방법은 다음과 같습니다. 명령어를 실행하여 새로운 프로젝트를 생성합니다:
django-admin startproject myproject
그리고 생성된 프로젝트 디렉터리로 이동합니다:
cd myproject
2. 사용자 인증 기능 구현
Django는 기본적으로 사용자 인증을 위한 다양한 기능을 제공합니다. 이러한 기능을 사용하여 회원가입, 로그인, 비밀번호 재설정을 구현할 수 있습니다.
2.1. 앱 생성
우선 사용자 인증을 처리할 앱을 생성해 보겠습니다. 다음 명령어를 통해 “accounts”라는 이름의 앱을 생성합니다:
python manage.py startapp accounts
생성한 앱을 settings.py
파일의 INSTALLED_APPS
리스트에 추가합니다:
INSTALLED_APPS = [
...
'accounts',
]
2.2. 모델 정의
우리는 기본 Django 사용자 모델을 사용할 것입니다. 하지만 필요에 따라 추가 필드를 추가할 수 있습니다. 아래 코드를 accounts/models.py
에 추가합니다:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
# 필요한 경우 추가 필드 정의
pass
2.3. 사용자 관리 폼 만들기
회원가입 및 로그인 기능을 위한 양식을 정의합니다. forms.py
파일을 생성하고 다음과 같이 작성합니다:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ('username', 'email', 'password1', 'password2')
2.4. 회원가입 뷰 작성
회원가입 폼을 처리할 뷰를 작성합니다. views.py
파일을 다음과 같이 수정합니다:
from django.shortcuts import render, redirect
from .forms import CustomUserCreationForm
def register(request):
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
form = CustomUserCreationForm()
return render(request, 'accounts/register.html', {'form': form})
2.5. URL 매핑
urls.py 파일을 생성하고 다음과 같이 작성하여 회원가입 URL을 매핑합니다:
from django.urls import path
from .views import register
urlpatterns = [
path('register/', register, name='register'),
]
3. 로그인 기능 구현
이제 로그인 기능을 추가하겠습니다. Django는 기본적으로 로그인 뷰를 제공합니다.
3.1. URL 매핑
다음과 같이 기존의 urls.py
에 로그인 URL을 추가합니다:
from django.contrib.auth import views as auth_views
urlpatterns = [
...
path('login/', auth_views.LoginView.as_view(), name='login'),
]
3.2. 로그인 템플릿 작성
로그인을 위한 템플릿을 작성합니다. accounts/templates/accounts/login.html
를 생성하고 다음과 같이 작성합니다:
<h2>로그인</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">로그인</button>
</form>
4. 비밀번호 재설정 기능 구현
마지막으로 비밀번호 재설정 기능을 추가하겠습니다. Django는 이를 위한 다양한 내장 뷰를 제공합니다.
4.1. URL 매핑
다음과 같이 비밀번호 재설정 URL을 추가합니다:
urlpatterns = [
...
path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
path('reset///', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
4.2. 비밀번호 재설정 템플릿
비밀번호 재설정을 위한 템플릿을 작성합니다:
<h2>비밀번호 재설정</h2>
<form method="post">
{% csrf_token %}
<label for="email">이메일 주소</label>
<input type="email" name="email" required>
<button type="submit">재설정 이메일 발송</button>
</form>
5. 전체 코드 구조
마지막으로, 지금까지 작성한 전체 코드 구조를 정리합니다.
5.1. 디렉토리 구조
myproject/
├── accounts/
│ ├── migrations/
│ ├── templates/
│ │ └── accounts/
│ │ ├── login.html
│ │ └── register.html
│ ├── \_\_init\_\_.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── myproject/
│ ├── \_\_init\_\_.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
결론
Django를 사용하여 간단한 사용자 인증 시스템을 구축하는 방법을 살펴보았습니다. 본 강좌에서는 사용자 회원가입, 로그인 및 비밀번호 재설정 기능을 구현했습니다. 이 기본적인 구조를 바탕으로 더 복잡한 기능을 확장해 나갈 수 있습니다.
이 글이 Django 서버 개발을 배우는 데 도움이 되길 바랍니다. 감사합니다!