[Django] 로그인, 로그아웃 간단 구현! (CBV)
- Back-End/Django
- 2022. 8. 10.
1. 배경
장고에서는 기본적으로 User Authentication 즉, 유저 인증 시스템을 가지고 있습니다. 이를 간단히 활용하여, 로그인 로그아웃을 구현해보겠습니다.
2. 해결
1) accounts app 만들기
python manage.py startapp accounts
2) settings.py에 등록
INSTALLED_APPS에 추가해줍니다.
3) urls.py에 path include
가장 루트의 urls.py(저의 경우 mysite/urls.py)에 path 객체를 추가해줍니다. include 함수에 "accounts.urls"를 해주게 되면, accounts 폴더 내부의 urls.py를 자동으로 읽어옵니다.
4) accounts/urls.py 생성 + 로그인 뷰 간단 구현
이제 accounts의 urls.py에서 "login/" url을 추가하겠습니다. 사실 view 함수는 views.py에서 정의해야 하지만 CBV(Class Based View)를 사용하면 한 줄로 되기 때문에 따로 views.py 말고 urls.py에 작성해보겠습니다. LoginView.as_view() 메소드를 사용합니다. template_name 파라미터는 default로 "registration/login.html" path를 갖습니다. 따로 login.html을 지정해 줍니다.
그러고 "accounts/login" url에 들어가면 아래와 같이 accounts/login.html이 없다고 TemplateDoesNotExist 에러가 발생합니다.
5) login.html 생성
위 에러를 해결하기 위해 accounts폴더에 templates/accounts/login.html 을 생성해줍니다. 그 내용은 아래처럼 간단하게 작성해 줍니다. blog/base.html을 상속받고, block content 내부에 form 태그만 작성해 줍니다. 이때, bootstrap_form을 사용할 것이기 때문에 위에서 2번째 줄에 django_bootstrap5를 load 해 줍니다.
(템플릿 시스템에 bootstrap5 적용하는 간단한 개념: [Django] 템플릿 시스템에 bootstrap5 간단하게 적용해보기)
그리고 다시 accounts/login url에 들어가면 아래처럼 로그인 화면이 예쁘게 나옵니다.
로그인 성공시 아래처럼 accounts/profile url로 이동하며 Page not found 에러가 발생합니다. 이는 장고에서 default로 로그인 성공 시 profile로 리다이렉트 하기 때문입니다.
6) 로그인 성공시 URL 변경
이를 해결하기 위해, settings.py에서 LOGIN_REDIRECT_URL을 설정해줘야 합니다. 로그인 성공 시 이동할 경로입니다.
그러면 로그인 성공시 아래처럼 /blog/ URL로 이동하는 것을 볼 수 있습니다.
7) base.html에서 로그인, 로그아웃 보여주기
이제 base.html에서 로그인했을 때 즉, user.is_authenticated가 True일 때는 로그인 한 유저와, 로그아웃을 보여주고, False 일 때는 로그인하라는 링크를 보여주도록 구현해보겠습니다.
8) 로그아웃 뷰 간단 구현
이후, 로그아웃을 눌렀을 때, url을 accounts/urls.py에 path 객체를 추가해주고, 여기서도 CBV를 이용하여 view를 거치지 않고 간단하게 LogoutView.as_view() 메소드를 수행합니다. next_page는 디폴트로 None입니다. 따로 /blog/로 설정하여, 로그아웃 하더라도 글 목록을 볼 수 있도록 합니다.
그러면 로그인한 상태에서 로그아웃을 눌렀을 때, 역시 /blog/ URL로 이동하는것을 볼 수 있습니다.
Reference
1. django Logo: https://codecondo.com/jobs-for-django-developers/django-framework-logo/
2. Content: 인프런 장고 강의 https://www.inflearn.com/course/%EC%9E%A5%EA%B3%A0-%EC%84%A4%EA%B3%84%EC%B2%A0%ED%95%99-%EC%9E%85%EB%AC%B8/
'Back-End > Django' 카테고리의 다른 글
[Django] SQL 쿼리 로그 확인하기 (feat. 콘솔창) (0) | 2022.08.11 |
---|---|
[Django] login_required 3가지 구현 방법 (AOP, Decorator) (0) | 2022.08.10 |
[Django] django command로 메일 보내기2 (HTML Template 활용) (0) | 2022.08.09 |
[Django] django command로 메일 보내기 기초 사용법(feat. naver mail) (0) | 2022.08.09 |
[Django] 템플릿 시스템에 bootstrap5 간단하게 적용해보기 (2) | 2022.08.08 |