✅ Django에서 LOGIN_URL, LOGIN_REDIRECT_URL을 설정했는데, 왜 view에서 또 명시해야 할까?
Django에서는 settings.py에 다음과 같은 인증 관련 설정을 자주 사용합니다:
LOGIN_REDIRECT_URL = '/' # 로그인 성공 후 이동할 기본 경로
LOGOUT_REDIRECT_URL = '/' # 로그아웃 후 이동할 기본 경로
LOGIN_URL = '/accounts/login/' # 로그인 페이지 경로
그런데 이렇게 설정해두었는데도, 어떤 상황에서는 views.py에서 아래처럼 직접 작성해야 합니다:
return redirect(settings.LOGIN_URL)
왜 이렇게 두 번 설정해야 하는 걸까요? 아래에 정리해드릴게요 👇
1️⃣ 자동으로 참조되는 상황
Django는 내부적으로 특정 상황에서 settings.py의 설정값들을 자동으로 사용합니다.
설정 Django가 자동으로 사용하는 상황
LOGIN_URL | @login_required 데코레이터나 LoginRequiredMixin 사용 시 로그인 안 했을 경우 자동 리디렉션 |
LOGIN_REDIRECT_URL | 로그인 성공 후 next 파라미터가 없으면 자동 이동 |
LOGOUT_REDIRECT_URL | 로그아웃 성공 후 자동 이동 |
예시:
from django.contrib.auth.decorators import login_required
@login_required
def dashboard(request):
return HttpResponse("비밀 페이지")
- 로그인 안 한 사용자가 접속하면 LOGIN_URL로 자동 이동합니다.
2️⃣ 직접 명시해야 하는 상황
반면, 다음과 같이 개발자가 주도적으로 리디렉션 흐름을 제어할 경우, settings.py의 값을 직접 가져와야 합니다:
from django.shortcuts import redirect
from django.conf import settings
def custom_register_view(request):
# 회원가입 후 수동으로 로그인 페이지로 이동
return redirect(settings.LOGIN_URL)
✅ 여기서는 Django가 자동으로 이동하지 않기 때문에 직접 redirect()와 settings.LOGIN_URL을 사용해줘야 합니다.
✅ 정리표: 자동 vs 직접
설정값 Django가 자동 사용하는 상황 직접 명시해야 하는 상황
LOGIN_URL | 로그인 안 했을 때 @login_required가 감지함 | 로그인 페이지로 수동 이동할 때 |
LOGIN_REDIRECT_URL | 로그인 성공 시 next 없을 경우 자동 이동 | 특정 페이지로 보내고 싶을 때 명시 필요 |
LOGOUT_REDIRECT_URL | 로그아웃 후 자동 이동 | 다른 흐름 처리 시 명시 필요 |
✨ 결론
- Django는 특정 상황에서 settings.py 설정을 자동 적용해줍니다.
- 그러나 개발자가 흐름을 직접 제어할 때는 반드시 명시적으로 redirect() 호출해야 해요.
👉 그러니 settings 값만 설정하고 "왜 안 되지?" 헷갈릴 필요 없어요!
자동으로 처리해주는 케이스와 직접 처리해야 하는 케이스를 구분해서 쓰시면 됩니다 😊
'기술블로그-Django편' 카테고리의 다른 글
✅ Django 서버 실행 시 "That port is already in use" 에러 해결법 (포트 점유 강제 종료) (0) | 2025.05.06 |
---|---|
✅ 왜 로그인은 자동인데, 회원가입은 우리가 직접 만들어야 할까? (0) | 2025.05.06 |
✅ Django에서 {% url 'login' %}이 가능한 이유 정리 (0) | 2025.05.06 |
📝 한글 입숨(Hangul Ipsum)이란? (0) | 2025.05.06 |
✅ WSL에서 pyenv 가상환경을 PyCharm에 연결하는 방법 (0) | 2025.05.06 |