[Django] 로그인, 로그아웃 간단 구현! (CBV)

반응형

django Logo

 

 
Contents

    1. 배경

    장고에서는 기본적으로 User Authentication 즉, 유저 인증 시스템을 가지고 있습니다. 이를 간단히 활용하여, 로그인 로그아웃을 구현해보겠습니다. 

    2. 해결

    1) accounts app 만들기

    python manage.py startapp accounts

    accounts 앱 생성

     

    2) settings.py에 등록

    INSTALLED_APPS에 추가해줍니다.

    INSTALLED_APPS에 추가

     

    3) urls.py에 path include

    가장 루트의 urls.py(저의 경우 mysite/urls.py)에 path 객체를 추가해줍니다. include 함수에 "accounts.urls"를 해주게 되면, accounts 폴더 내부의 urls.py를 자동으로 읽어옵니다.

    루트 urls.py에 path 객체 추가

     

    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을 지정해 줍니다.

    path 객체에 View 포함해서 추가

     

     

    그러고 "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 간단하게 적용해보기)

    login.html 생성

     

     

    그리고 다시 accounts/login url에 들어가면 아래처럼 로그인 화면이 예쁘게 나옵니다.

    login.html로 구현된 로그인 화면

     

     

    로그인 성공시 아래처럼 accounts/profile url로 이동하며 Page not found 에러가 발생합니다. 이는 장고에서 default로 로그인 성공 시 profile로 리다이렉트 하기 때문입니다.

    로그인 성공시 리다이렉트

     

    6) 로그인 성공시 URL 변경

    이를 해결하기 위해, settings.py에서 LOGIN_REDIRECT_URL을 설정해줘야 합니다. 로그인 성공 시 이동할 경로입니다.

    로그인 성공시 URL 변경

     

    그러면 로그인 성공시 아래처럼 /blog/ URL로 이동하는 것을 볼 수 있습니다.

    로그인 성공시 변경된 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/로 설정하여, 로그아웃 하더라도 글 목록을 볼 수 있도록 합니다.

    로그아웃 url 구현

     

    그러면 로그인한 상태에서 로그아웃을 눌렀을 때, 역시 /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/
    반응형

    댓글

    Designed by JB FACTORY