Django
Chapter 3-7 Django 회원가입(SignUp) 및 로그인(Login) 페이지 만들기
Chansman
2025. 5. 6. 18:31
🧾 Django 회원가입(SignUp) 및 로그인(Login) 페이지 만들기
1️⃣ App 분리: 회원가입 전용 member 앱 생성
python manage.py startapp member
→ 기능별로 앱을 분리하면 유지보수와 확장에 유리합니다. (예: 회원 관리, 블로그 기능, 댓글 등 개별 앱)
📌 settings.py에 앱 등록:
OWN_APPS = [
'blog',
'member', # ✅ 회원 기능 추가
]
INSTALLED_APPS = DJANGO_APPS + OWN_APPS + THIRD_PARTY_APPS
2️⃣ 회원가입 뷰 작성 (member/views.py)
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
from django.conf import settings
def sign_up(request):
form = UserCreationForm(request.POST or None) # POST 데이터가 있을 경우 포함해 폼 생성
if form.is_valid(): # 아이디 중복, 비밀번호 규칙 검증 포함
form.save() # 새 유저 DB에 저장
return redirect(settings.LOGIN_URL) # 로그인 페이지로 리디렉션
context = {'form': form}
return render(request, 'registration/signup.html', context)
📌 UserCreationForm은 username, password1, password2 필드 포함
📌 유효성 검사 실패 시 오류 메시지가 form에 포함되어 템플릿에 전달됨
3️⃣ 회원가입 템플릿 구성 (signup.html)
경로: templates/registration/signup.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
<h1>회원가입</h1>
<form method="post">
{% csrf_token %} <!-- CSRF 보안 토큰 필수 -->
{{ form.as_p }} <!-- 폼 필드를 <p> 단위로 출력 -->
<button type="submit">가입하기</button>
</form>
</body>
</html>
4️⃣ URL 연결 (urls.py)
from django.contrib import admin
from django.urls import path, include
from blog import views
from member import views as member_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.blog_list, name='blog_list'),
path('<int:pk>/', views.blog_detail, name='blog_detail'),
path('accounts/', include('django.contrib.auth.urls')),
# ✅ 사용자 기능 연결
path('signup/', member_views.sign_up, name='signup'),
path('login/', member_views.login, name='login'),
]
📌 auth.urls는 Django 기본 로그인/로그아웃/비밀번호 기능 포함
📌 직접 만든 login 뷰는 /login/ 경로에 연결
5️⃣ 로그인 설정 (settings.py)
LOGIN_URL = '/login/' # 로그인 페이지 경로 지정
→ 인증되지 않은 사용자가 보호된 페이지 접근 시 이 경로로 리디렉트됨
6️⃣ 직접 구현한 로그인 뷰 (Mini Project)
# member/views.py
from django.conf import settings
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.shortcuts import render, redirect
from django.contrib.auth import login as django_login
from django.urls import reverse
def login(request):
form = AuthenticationForm(request, request.POST or None) # 요청 데이터를 바탕으로 로그인 폼 생성
if form.is_valid():
django_login(request, form.get_user()) # 인증된 사용자 세션에 등록 (로그인 처리)
return redirect(reverse('blog_list')) # 로그인 성공 시 블로그 메인 페이지로 이동
context = {
'form': form
}
return render(request, 'registration/login.html', context)
📌 AuthenticationForm: Django 기본 제공 로그인 폼 → username/password 필드 포함
📌 form.get_user(): 검증 성공 시 로그인 대상 사용자 반환
📌 reverse('blog_list'): URL 하드코딩 대신 name으로 라우팅 경로 찾아 이동
📌 django_login: 내부적으로 request.session에 사용자 정보 저장
7️⃣ 로그인 템플릿 구성 (login.html)
<!-- templates/registration/login.html -->
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">로그인</button>
</form>
📌 로그인 실패 시 오류 메시지가 자동 포함됨 (form 오류 처리 포함)
✅ 전체 흐름 요약
- /signup/ → 회원가입 폼 (UserCreationForm)으로 사용자 등록
- /login/ → 로그인 폼 (AuthenticationForm)으로 인증 및 세션 저장
- 로그인 성공 시 → LOGIN_URL 및 LOGIN_REDIRECT_URL 기반 이동
항목 설명
UserCreationForm | 회원가입 시 기본 유저 검증 폼 |
AuthenticationForm | 로그인 시 인증용 폼 |
django_login() | 인증된 유저를 세션에 저장 |
reverse() | URL 하드코딩 방지용 도우미 |
settings.LOGIN_URL | 로그인 리디렉션 경로 설정 |
💬 회원가입과 로그인을 직접 구현하면서 Django의 인증 흐름과 세션 관리 방식에 대한 이해도를 높일 수 있습니다. 보안 기능과 폼 처리까지 자동화되어 있어 생산성과 안정성이 모두 보장됩니다.