DJango 서버개발, 사용자 로그인, 회원가입, 비밀번호 재설정 기능 구현하기

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 서버 개발을 배우는 데 도움이 되길 바랍니다. 감사합니다!