Django에서 Auth User 회원가입 및 로그인 기능 구현하는 방법

Django에서 Auth User 회원가입 및 로그인 기능 구현하는 방법
Cozy CodingPosted On Jun 22, 202410 min read

아래는 Django Best Practices에 대한 이전 블로그를 확인해보세요: Tips for Writing Better Code.

소개

사용자 인증과 권한 부여는 웹 애플리케이션에서 중요한 구성 요소입니다. 인기 있는 Python 웹 프레임워크인 Django는 사용자 로그인 및 가입 기능을 구현하기 위한 강력한 기능을 제공합니다.

이 블로그 포스트에서는 Django 및 HTML 폼을 사용하여 사용자 로그인 및 가입 시스템을 만드는 방법을 살펴보겠습니다. 이 기능을 Django 프로젝트에 성공적으로 구현하는 데 도움이 되는 필수 단계를 다루고 유용한 리소스를 제공할 것입니다.

그러니까, 간단한 애플리케이션을 만들어 봅시다 👍

준비물

이 자습서에 들어가기 전에 다음의 준비물이 갖춰져 있는지 확인하십시오:

  • Python 및 Django Framework의 기본적인 이해
  • 시스템에 설치된 Python (버전 3.6 이상) 및 pip
  • Django 프레임워크와 그 개념에 익숙함

[참고: Virtual Environment를 활용하세요. 👍]

단계

1. Django 프로젝트 설정하기

우리 간단한 애플리케이션을 만들기 위해서는 새 Django 프로젝트를 설정해야 합니다. 설치 프로세스 및 프로젝트 초기화에 대해 다룰 것입니다.

시작하려면 다음 단계를 따라 Django 프레임워크를 설정하세요:

pip를 사용하여 Django 프레임워크를 설치합니다:

pip install django

새로운 Django 프로젝트를 만들어보세요:

django-admin startproject myproject

프로젝트 내에 새로운 Django 앱을 만들어보세요:

cd myproject
python manage.py startapp myapp

2. Django 설정 구성하기

당신의 Django 프로젝트의 settings.py 파일을 열고 다음 코드를 작성해주세요:

INSTALLED_APPS = [
    # ...
    # ..
    # .
    # 👇 1. 이 줄을 추가해주세요
    'myapp',
]

TEMPLATES = [
    {
        # 👇 2. 이 줄을 추가해주세요 
        'DIRS': ['templates'],
        
    },
]

3. URL 추가하기

이제 myapp URL에 접근하려면 myproject/urls.py 파일에 다음 줄을 추가해야 합니다.

myproject 폴더 안의 urls.py 파일을 열고 다음 코드를 작성하세요:

from django.contrib import admin
from django.urls import path, include # 👈 1. 이 줄 추가

urlpatterns = [
    path('admin/', admin.site.urls),
    # 👇 2. 이 곳에 앱 URL 추가
    path('', include('myapp.urls'))
]

뷰의 URL 구성:

myapp 폴더 안에 urls.py 파일을 생성하고 아래 코드를 작성하세요:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='home'),
    path('login/', views.user_login, name='login'),
    path('signup/', views.user_signup, name='signup'),
    path('logout/', views.user_logout, name='logout'),
]
  • urlpatterns: 어플리케이션의 URL 패턴을 보유하는 리스트입니다. 각 URL 패턴은 리스트의 요소로 정의됩니다.
  • path('', views.index, name='home'): 이 줄은 어플리케이션의 홈페이지에 대한 URL 패턴을 정의합니다. 빈 문자열 ``은 루트 URL을 나타냅니다. views.index는 뷰 모듈의 index 함수가 홈페이지를 렌더링하는 데 사용됨을 나타냅니다. name='home'은 이 URL 패턴에 이름을 할당하는 선택적 매개변수로, 다른 코드의 다른 부분에서 이 URL 패턴을 참조하는 데 사용할 수 있습니다.
  • path('login/', views.user_login, name='login'): 이 줄은 로그인 페이지에 대한 URL 패턴을 정의합니다. login/ 문자열은 URL 경로 /login/을 나타냅니다. views.user_login은 뷰 모듈의 user_login 함수가 로그인 페이지를 렌더링하는 데 사용됨을 나타냅니다. name='login'은 이 URL 패턴에 이름을 할당합니다.
  • path('signup/', views.user_signup, name='signup'): 이 줄은 가입 페이지에 대한 URL 패턴을 정의합니다. signup/ 문자열은 URL 경로 /signup/을 나타냅니다. views.user_signup은 뷰 모듈의 user_signup 함수가 가입 페이지를 렌더링하는 데 사용됨을 나타냅니다. name='signup'은 이 URL 패턴에 이름을 할당합니다.
  • path('logout/', views.user_logout, name='logout'): 이 줄은 로그아웃 페이지에 대한 URL 패턴을 정의합니다. logout/ 문자열은 URL 경로 /logout/을 나타냅니다. views.user_logout은 뷰 모듈의 user_logout 함수가 로그아웃 페이지를 렌더링하는 데 사용됨을 나타냅니다. name='logout'은 이 URL 패턴에 이름을 할당합니다.

이러한 URL 패턴은 사용자가 입력한 URL과 해당 페이지를 렌더링하는 데 사용되어야 하는 뷰 사이의 매핑을 결정합니다. 이 경우, 뷰 모듈에는 index, user_login, user_signup, user_logout 등의 함수가 포함되어 있으며, 각 페이지의 렌더링을 처리합니다.

5. 뷰 함수 추가

myapp 폴더 내의 views.py 파일을 열고 아래 코드를 작성하여 템플릿을 표시하고 리다이렉션합니다:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from .forms import SignupForm, LoginForm

# 여기서 뷰 함수를 생성합니다.
# 홈 페이지
def index(request):
    return render(request, 'index.html')

# 회원 가입 페이지
def user_signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')
    else:
        form = SignupForm()
    return render(request, 'signup.html', {'form': form})

# 로그인 페이지
def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user:
                login(request, user)
                return redirect('home')
    else:
        form = LoginForm()
    return render(request, 'login.html', {'form': form})

# 로그아웃 페이지
def user_logout(request):
    logout(request)
    return redirect('login')

제공된 코드 조각은 사용자 인증과 계정 관리를 위한 다양한 뷰를 포함한 Django의 views.py 파일을 나타냅니다. 각 함수의 내용은 다음과 같습니다:

  • index(request): 이 뷰는 애플리케이션의 홈 페이지를 나타냅니다. index.html 템플릿을 렌더링하고 응답으로 반환합니다.
  • user_signup(request): 이 뷰는 회원 가입 페이지를 처리합니다. 요청 메서드가 POST인 경우를 확인하여, 이는 폼 제출을 나타냅니다. 그렇다면 UserCreationForm을 사용하여 제출된 폼 데이터를 유효성 검사합니다. 폼이 유효한 경우, 사용자를 저장하고 로그인 페이지로 리디렉션합니다. 요청 메서드가 GET인 경우, UserCreationForm의 새 인스턴스를 만들어 signup.html 템플릿을 렌더링하고 폼을 context로 전달합니다.
  • user_login(request): 이 뷰는 로그인 페이지를 처리합니다. 요청 메서드가 POST인 경우를 확인하여, 이는 폼 제출을 나타냅니다. LoginForm을 사용하여 제출된 폼 데이터를 유효성 검사합니다. 폼이 유효한 경우, 정제된 데이터에서 사용자 이름과 비밀번호를 검색합니다. 그런 다음 authenticate()를 사용하여 사용자를 인증하고 login()을 사용하여 사용자를 로그인 처리합니다. 사용자가 성공적으로 인증되면 홈 페이지로 리디렉션됩니다. 요청 메서드가 GET인 경우, LoginForm의 새 인스턴스를 만들어 login.html 템플릿을 렌더링하고 폼을 context로 전달합니다.
  • user_logout(request): 이 뷰는 로그아웃 기능을 처리합니다. Django에서 제공하는 logout() 함수를 호출하여 사용자를 로그아웃하고 로그인 페이지로 리디렉션합니다.

코드에는 다양한 Django 모듈 및 폼을 위한 import 문 (render, redirect, authenticate, login, logout, UserCreationForm 및 LoginForm)도 포함되어 있습니다. 이러한 import는 뷰의 올바른 작동을 위해 필요합니다.

총론적으로, 이 코드는 Django를 사용하여 사용자 회원 가입, 로그인 및 로그아웃 기능의 기본적인 구현을 보여줍니다. 연결된 폼과 함께 이러한 뷰를 Django 프로젝트에 통합하여 사용자 인증 및 계정 관리를 활성화할 수 있습니다.

myapp 폴더 안에 forms.py라는 새 파일을 만들고 아래 코드를 작성해주세요:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class SignupForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'password1', 'password2']

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

제공된 코드 스니펫은 Django forms 모듈을 나타내며 SignupFormLoginForm 두 가지 폼을 정의합니다. 이러한 폼은 Django 애플리케이션에서 사용자 가입 및 로그인 기능에 사용됩니다.

SignupForm:
  • UserCreationForm은 사용자 등록을 위해 특별히 디자인된 내장 Django 폼인 UserCreationForm에서 상속됩니다.
  • UserCreationForm은 username, password1, 그리고 password2(비밀번호 확인) 필드를 제공합니다.
  • Meta 클래스는 사용할 모델을 지정하는데, 기본 Django User 모델로 django.contrib.auth.models에서 가져옵니다.
  • fields 속성은 폼에 포함되어야 하는 필드를 나열하며, 즉 username, password1, password2를 나열합니다.

LoginForm:

  • 사용자 로그인을 위해 사용되는 표준 Django 폼입니다.
  • 특정 Django 폼 클래스를 상속하지 않습니다.
  • forms.CharField() 메서드를 사용하여 'username'과 'password' 두 개의 필드를 정의합니다.
  • 'password' 필드는 widget=forms.PasswordInput 인수에 의해 비밀번호 입력 필드로 렌더링됩니다.

이러한 폼은 Django 뷰 내에서 사용자 등록 및 인증 프로세스를 처리하기 위해 사용될 수 있습니다. 적절한 필드와 유효성 검사가 포함된 HTML 폼을 생성하는 편리한 방법을 제공합니다.

7. 템플릿

마이프로젝트에 새로운 폴더 템플릿을 만들고, index.html이라는 새 파일을 생성하고 아래 코드를 작성해 주세요:

{ 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 }

<h1>환영합니다!</h1>
# 로그인

<form method="POST">
    { csrf_token }
    { form.as_p }
    <button type="submit">로그인</button>
    <a href="{ url 'signup' }">계정이 없으신가요? 가입하기</a>
</form>

새로운 signup.html 파일을 생성하고 아래 코드를 작성하세요:

# 가입하기

<form method="POST">
    { csrf_token }
    { form.as_p }
    <button type="submit">가입하기</button>
    <a href="{ url 'login' }">이미 계정이 있으신가요?</a>
</form>

8. 테스팅 및 실행

이제 Django Framework을 사용하여 애플리케이션의 기본 구조를 설정했으니, 앱을 테스트하고 실행하는 시간입니다. 다음 단계를 따라주세요:

단계 1: 명령줄 인터페이스 열기

명령줄 인터페이스를 열고 Django 프로젝트의 루트 디렉토리로 이동하세요.

계속 진행하려면 myproject 폴더 내에서 터미널을 열고 다음 명령을 실행하세요:

python manage.py makemigrations
python manage.py migrate

Step 2: 서버 시작하기:

서버를 시작하려면 다음 명령을 명령줄 인터페이스에서 실행하세요:

python manage.py runserver

이 명령을 사용하면 Django 개발 서버가 시작됩니다.

단계 3: 테스트

서버를 실행한 후 http://127.0.0.1:8000/ 에서 프로젝트 인터페이스에 액세스합니다.

어느 브라우저를 열어서 http://127.0.0.1:8000/ URL 로 이동하면 웹 사이트의 홈페이지가 다음과 같이 보입니다:

확인 페이지

로그인 페이지:

로그인 페이지

가입 페이지:

이미지

전체 라이브 데모를 확인해보세요:

결론

이 블로그 포스트에서는 Django와 HTML 폼을 사용하여 사용자 로그인 및 가입 기능을 구현하는 방법을 살펴보았습니다. Django 프로젝트 설정부터 템플릿 디자인 및 뷰와 폼 구현까지 필요한 단계를 다루었습니다. 제공된 자원과 참고 자료를 따라하면 Django 애플리케이션에서 사용자 인증 프로세스를 더욱 맞춤화하고 향상시킬 수 있습니다.

웹 애플리케이션의 사용자 인증은 매우 중요한 요소입니다. 사용자 데이터를 보호하기 위해 보안을 우선시하고 최상의 방법을 따르는 것이 중요합니다. Django와 Bootstrap을 사용하면 견고한 보안 조치를 유지하면서도 매끄러운 사용자 경험을 만들 수 있습니다.

코딩 즐기세요!

개발 지식을 공유하는 제 열정을 지원하고자 Buy Me a Coffee로 기부를 부탁드립니다. 여러분의 기부로 저는 가치 있는 콘텐츠와 자료를 만들 수 있습니다. 지원해 주셔서 감사합니다!

이 블로그에서 제시된 정보에 대한 질문이나 의견이 있으면 언제든지 연락해 주세요. 다시 한번 읽어 주셔서 감사합니다!

자료

  • Django 프레임워크 문서
  • Django AuthenticationForm
  • Django UserCreationForm