✅ 왜 로그인은 자동인데, 회원가입은 우리가 직접 만들어야 할까?
Django를 처음 사용할 때 많이들 헷갈리는 부분이 있습니다:
- 로그인은 {% url 'login' %}만 넣어도 자동으로 동작하고,
- 로그아웃도 {% url 'logout' %}로 바로 가능하고,
- 비밀번호 변경도 자동인데...
➡️ 왜 **회원가입(회원 생성)**은 직접 views.py에서 만들어야 할까요?
1️⃣ Django가 기본 제공하는 인증 기능
Django는 아래 기능들을 이미 내부적으로 구현해두었습니다:
기능 제공 여부 내부 View 이름
로그인 | ✅ 기본 제공 | LoginView |
로그아웃 | ✅ 기본 제공 | LogoutView |
비밀번호 변경 | ✅ 기본 제공 | PasswordChangeView |
비밀번호 초기화/재설정 | ✅ 기본 제공 | PasswordResetView 등 |
회원가입 | ❌ 직접 구현 필요 | 없음 |
이 기능들은 아래 코드를 urls.py에 추가하면 모두 사용할 수 있습니다:
path('accounts/', include('django.contrib.auth.urls')),
이렇게 하면 로그인/로그아웃/비번 변경 등 URL이 자동 등록되고, name='login' 등도 활성화됩니다.
2️⃣ 회원가입은 왜 직접 구현해야 할까?
Django는 보안상 이유와 다양한 커스터마이징 수요 때문에 회원가입 기능은 기본 제공하지 않습니다. 대신 UserCreationForm이라는 폼 클래스만 제공합니다.
그래서 우리는 이렇게 직접 view를 만들어야 해요:
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
def signup_view(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
form = UserCreationForm()
return render(request, 'registration/signup.html', {'form': form})
그리고 이 view를 urls.py에 연결해야 하죠:
path('accounts/signup/', views.signup_view, name='signup'),
✅ 정리표: Django 인증 기능 제공 여부
기능 기본 제공 여부 우리가 해야 할 일
로그인 | ✅ 있음 | 템플릿만 만들면 됨 |
로그아웃 | ✅ 있음 | 템플릿만 만들면 됨 |
비밀번호 변경 | ✅ 있음 | 템플릿만 만들면 됨 |
회원가입 | ❌ 없음 | 직접 view 작성 + url 연결 + 폼 구성 |
🔄 settings.py 설정은 어디에 영향을 줄까?
LOGIN_URL = '/accounts/login/'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
설정 적용 시점 자동 적용 여부
LOGIN_URL | 로그인 안 된 사용자 접근 시 자동 이동 | ✅ 자동 |
LOGIN_REDIRECT_URL | 로그인 성공 후 이동 경로 | ✅ 자동 |
LOGOUT_REDIRECT_URL | 로그아웃 후 이동 경로 | ✅ 자동 |
회원가입 후 이동 | 직접 redirect()로 처리해야 함 | ❌ 수동 |
✅ 결론
- 로그인/로그아웃은 Django가 이미 View를 만들어놔서 바로 사용 가능
- 하지만 회원가입은 View가 없기 때문에 우리가 직접 만들어야 함
- settings.py 설정들은 Django 내부 뷰가 자동으로 참조하지만, 우리가 직접 만든 회원가입 뷰는 직접 처리해야 함
➡️ 따라서 회원가입 후 어디로 보낼지도 view 안에서 redirect()로 명시해줘야 하는 것이죠!
필요하시면 회원가입 템플릿(signup.html)도 함께 정리해드릴게요 😊
'기술블로그' 카테고리의 다른 글
✅ Django 모델에서 ForeignKey(User, ...) 에서 'User'는 인자일까? 매개변수일까? (0) | 2025.05.07 |
---|---|
✅ Django 서버 실행 시 "That port is already in use" 에러 해결법 (포트 점유 강제 종료) (0) | 2025.05.06 |
✅ Django에서 LOGIN_URL, LOGIN_REDIRECT_URL을 설정했는데, 왜 view에서 또 명시해야 할까? (0) | 2025.05.06 |
✅ Django에서 {% url 'login' %}이 가능한 이유 정리 (0) | 2025.05.06 |
📝 한글 입숨(Hangul Ipsum)이란? (0) | 2025.05.06 |