#로그인과 로그아웃
장고의 로그인, 로그아웃을 도와주는 앱은 django.contrib.auth 이다.
이 앱은 장고 프로젝트 생성 시 다음처럼 자동으로 추가된다.
#config/settings.py
INSTALLED_APPS = [
'pybo.apps.PyboConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
로그인과 로그아웃은 하나의 앱에만 사용되는 것이 아니고 공통으로 사용되는 기능이므로
하나의 앱에 종속시키는 것은 좋지 못하다.
그러므로 다음과 같이 common 앱을 신규로 생성하자.
#django-admin startapp common
#config/settings.py
INSTALLED_APPS = [
'common.apps.CommonConfig',
'pybo.apps.PyboConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
#config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('pybo/', include('pybo.urls')),
path('common/', include('common.urls')),
]
#이제 http://localhost:8000/common/ 으로 시작하는 URL 은 모두 common/urls.py 파일을 참조할 것이다.
#common/urls.py
app_name = 'common'
urlpatterns = []
#로그인 뷰
from django.urls import path
from django.contrib.auth import views as auth_views
app_name = 'common'
urlpatterns = [
path('login/', auth_views.LoginView.as_view(), name='login'),
]
위 상태에서 navbar 에 있는 '로그인' 을 클릭하면 위와 같은 그림을 만날 수 있다.
해당 오류는 registration 디렉터리에 login.html 파일이 없음을 의미한다. 앞에서 사용한 LoginView 는 registration 이라는 템플릿 디렉터리에서 login.html 파일을 찾는다. 그런데 이 파일을 찾지 못해 오류가 발생한 것이다.
이 오류를 해결하려면 registration/login.html 템플릿을 작성해야한다.
하지만 로그인은 common 앱에 구현할 것이므로 오류 메시지에 표시한 것처러 registration 디렉터리에서 템플릿 파일을 생성하기보다는 common 디렉터리에 템플릿을 생성하는 것이 좋다. 이를 위해 LoginView가 common 디렉터리의 템플릿을 참조할 수 있도록 common/urls.py 파일을 다음과 같이 수정하자.
from django.urls import path
from django.contrib.auth import views as auth_views
app_name = 'common'
urlpatterns = [
path('login/', auth_views.LoginView.as_view("template_name = 'common/login.html'"), name='login'),
]
위와 같이 수정하고나면 다음과 같이 오류메세지가 변경된 것을 확인할 수 있다.
그럼 이제 pybo/templates 하위 폴더로 common 을 만들고 그 하위에 login.html 만들면 된다.
[Django] 모델 변경하기 (0) | 2022.09.28 |
---|---|
[Django] 회원가입 (0) | 2022.09.25 |
[Django] 템플릿 필터 함수 (0) | 2022.09.23 |
[Django] 페이징 (1) | 2022.09.22 |
[Django] 네비게이션바 (1) | 2022.09.22 |