Django는 강력하고 편리한 웹 프레임워크로, 복잡한 웹 애플리케이션을 신속하게 개발할 수 있도록 돕습니다. 그중에서도 Django의 기본 인증 시스템은 사용자 인증과 권한 관리를 쉽게 처리할 수 있는 기능을 제공합니다. 이번 글에서는 Django의 기본 인증 시스템을 자세히 이해하고, 이를 활용하여 간단한 웹 애플리케이션을 개발하는 방법을 설명하겠습니다.
1. Django의 기본 인증 시스템 소개
Django의 기본 인증 시스템은 사용자 계정 생성, 로그인, 로그아웃 및 비밀번호 변경과 같은 기능을 제공합니다. 이 시스템은 django.contrib.auth
패키지를 기반으로 하며, Django 프로젝트에서 쉽게 활용할 수 있습니다. 기본적으로 다음과 같은 기능을 포함하고 있습니다.
- 사용자 등록
- 로그인 및 로그아웃
- 비밀번호 변경 및 초기화
- 권한 관리자
2. Django 프로젝트 설정
시작하기에 앞서 Django 프로젝트를 설정해야 합니다. 아래의 명령어를 통해 새로운 Django 프로젝트를 생성해 보겠습니다.
django-admin startproject myproject
프로젝트 디렉토리로 이동한 후, 다음 명령어를 실행하여 Django의 기본 인증 시스템을 포함하는 앱을 생성합니다.
python manage.py startapp accounts
3. settings.py
파일 수정하기
생성한 accounts
앱을 프로젝트 설정에 추가합니다. myproject/settings.py
파일을 열고, INSTALLED_APPS
리스트에 accounts
를 추가합니다.
INSTALLED_APPS = [
...
'django.contrib.auth',
'django.contrib.contenttypes',
'accounts',
...
]
4. 사용자 모델 정의
Django의 기본 사용자 모델을 사용할 수도 있지만, 필요에 따라 사용자 모델을 확장할 수도 있습니다. 아래와 같이 사용자 모델을 정의하겠습니다.
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
bio = models.TextField(blank=True, null=True) # 사용자 설명 추가
5. 사용자 등록 양식 만들기
이제 사용자가 회원가입할 수 있도록 사용자 등록 양식을 만들어 보겠습니다. 이를 위해 Django의 forms
모듈을 사용할 것입니다.
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', 'bio')
6. 사용자 등록 뷰 만들기
사용자 등록 양식을 처리할 뷰를 만들겠습니다. 아래의 코드를 accounts/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})
7. 사용자 로그인 및 로그아웃 기능 구현하기
다음으로, 사용자 로그인 및 로그아웃 기능을 구현하겠습니다. Django는 기본적으로 로그인과 로그아웃을 처리하는 뷰를 제공합니다.
로그인 뷰를 다음과 같이 설정합니다.
from django.contrib.auth import login
from django.contrib.auth.forms import AuthenticationForm
def user_login(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user)
return redirect('home')
else:
form = AuthenticationForm()
return render(request, 'accounts/login.html', {'form': form})
8. 템플릿 만들기
이제 사용자 등록과 로그인 소스를 위한 템플릿을 만들어야 합니다. accounts/templates/accounts/register.html
파일을 아래와 같이 작성합니다.
<h1>회원가입</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">가입하기</button>
</form>
9. URL 설정하기
이제 만들어둔 뷰와 템플릿을 연결하기 위해 URL 패턴을 설정합니다. accounts/urls.py
파일을 생성하고 다음과 같은 내용을 추가합니다.
from django.urls import path
from .views import register, user_login
urlpatterns = [
path('register/', register, name='register'),
path('login/', user_login, name='login'),
]
그리고 myproject/urls.py
파일에 accounts.urls
를 포함시킵니다.
from django.urls import include, path
urlpatterns = [
path('accounts/', include('accounts.urls')),
...
]
10. 애플리케이션 실행하기
모든 설정이 완료되었습니다. 이제 애플리케이션을 실행해 보겠습니다. 아래의 명령어를 실행하여 서버를 시작합니다.
python manage.py runserver
11. 결과 확인
웹 브라우저를 열고 http://127.0.0.1:8000/accounts/register/
로 이동하여 회원가입을 시도해 보세요. 회원가입 후에 로그인 화면으로 이동할 수 있어야 합니다. 이처럼 Django의 기본 인증 시스템을 통해 사용자 인증 기능을 간편하게 구현할 수 있습니다.
12. 결론
Django의 기본 인증 시스템은 사용자 인증 기능을 쉽게 구현할 수 있는 강력한 도구입니다. 이제 기본적인 사용자 등록과 로그인 기능을 구현하는 방법을 배웠습니다. 이 기능들을 바탕으로 실제 애플리케이션에 맞는 다양한 인증 및 권한 관리 로직을 추가할 수 있습니다.
보다 복잡한 인증 시스템이 필요한 경우, Django의 django-allauth
와 같은 외부 패키지를 도입하여 소셜 로그인과 같은 기능을 추가할 수 있습니다. Django의 강력한 생태계를 활용하여 여러분의 웹 애플리케이션을 더욱 발전시켜 보세요.