Django에서 사용자 인증(Authentication) 시스템 구축하기
Django는 강력한 인증(Authentication) 시스템을 기본적으로 제공하며, 이를 활용하면 사용자 계정 관리, 로그인, 로그아웃 등을 손쉽게 구현할 수 있습니다. 이번 포스팅에서는 Django의 User 모델을 활용하여 사용자 인증 시스템을 구축하는 방법을 설명하겠습니다.
1. Django의 기본 사용자 모델(User Model)
Django에서는 django.contrib.auth.models.User 클래스를 제공하며, 이를 사용하여 사용자 계정을 관리할 수 있습니다. 기본적으로 아래와 같은 필드를 제공합니다.
username: 사용자 이름email: 이메일 주소password: 비밀번호 (해싱되어 저장됨)first_name,last_name: 이름 및 성is_staff,is_active,is_superuser: 사용자 권한 관리date_joined: 가입 날짜
2. Django 인증 시스템 설정
Django 프로젝트에서 기본 인증 시스템을 사용하려면 INSTALLED_APPS와 MIDDLEWARE 설정을 확인해야 합니다.
2.1 settings.py 설정 확인
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
3. 회원가입 기능 구현
회원가입 기능을 만들기 위해 Django의 기본 UserCreationForm을 활용할 수 있습니다.
3.1 forms.py에 사용자 회원가입 폼 생성
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class SignUpForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
3.2 views.py에서 회원가입 처리
from django.shortcuts import render, redirect
from django.contrib.auth import login
from .forms import SignUpForm
def signup(request):
if request.method == "POST":
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect('home')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
3.3 urls.py에 회원가입 URL 추가
from django.urls import path
from .views import signup
urlpatterns = [
path('signup/', signup, name='signup'),
]
3.4 signup.html 템플릿 작성
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">가입하기</button>
</form>
4. 로그인 및 로그아웃 기능 구현
Django는 django.contrib.auth 모듈을 통해 로그인 및 로그아웃 기능을 쉽게 제공하며, 이를 활용할 수 있습니다.
4.1 로그인 뷰 구현 (views.py)
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render, redirect
def user_login(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
return render(request, 'login.html', {'error': 'Invalid credentials'})
return render(request, 'login.html')
def user_logout(request):
logout(request)
return redirect('home')
4.2 로그인 및 로그아웃 URL 추가 (urls.py)
urlpatterns += [
path('login/', user_login, name='login'),
path('logout/', user_logout, name='logout'),
]
4.3 로그인 템플릿 (login.html)
<form method="post">
{% csrf_token %}
<label for="username">아이디:</label>
<input type="text" name="username" required>
<label for="password">비밀번호:</label>
<input type="password" name="password" required>
<button type="submit">로그인</button>
</form>
{% if error %}<p>{{ error }}</p>{% endif %}
5. 로그인 상태 표시 및 로그아웃 버튼 추가
Django 템플릿에서 request.user.is_authenticated를 활용하여 로그인 상태를 확인하고 UI를 다르게 렌더링할 수 있습니다.
{% if request.user.is_authenticated %}
<p>안녕하세요, {{ request.user.username }}님!</p>
<a href="{% url 'logout' %}">로그아웃</a>
{% else %}
<a href="{% url 'login' %}">로그인</a>
<a href="{% url 'signup' %}">회원가입</a>
{% endif %}
6. Django 기본 로그인 뷰 활용하기
Django는 django.contrib.auth.views.LoginView, LogoutView를 제공하여 간편하게 로그인 및 로그아웃을 처리할 수 있습니다.
6.1 urls.py에 기본 로그인/로그아웃 뷰 추가
from django.contrib.auth.views import LoginView, LogoutView
urlpatterns += [
path('login/', LoginView.as_view(template_name='login.html'), name='login'),
path('logout/', LogoutView.as_view(), name='logout'),
]
7. 결론
Django에서 제공하는 기본 사용자 인증 시스템을 활용하면 간단한 코드만으로 강력한 사용자 계정 관리 기능을 구현할 수 있습니다. 회원가입, 로그인, 로그아웃 기능을 추가하여 더 나은 사용자 경험을 제공할 수 있습니다. 이후에는 사용자 권한 및 그룹 관리, 소셜 로그인 기능 등을 추가하는 것도 고려해볼 수 있습니다.
'Python > Django' 카테고리의 다른 글
| Django에서 REST API 만들기 (Django REST Framework 소개 및 기본 사용법) (0) | 2025.11.08 |
|---|---|
| Django 미들웨어 개념과 활용법 (0) | 2025.11.07 |
| Django에서 파일 업로드 처리 (ImageField, FileField) (0) | 2025.11.05 |
| Django ModelForm을 이용한 사용자 입력 처리 (0) | 2025.11.04 |
| Django Form 기본 개념 및 활용법 (forms.py) (0) | 2025.11.03 |