django 15 로그아웃

Grace Goh·2022년 10월 10일
0

Django

목록 보기
16/32

로그인/로그아웃은 user 기능이므로 user 앱에 작성한다.

django logout이 아니라면, request에 사용자가 있는지 여부를 session에서 확인해야 하고 if문도 많이 들어갈 것.
그러나 django 기능을 쓰면 1라인으로 처리할 수 있다.

user/views.py

from django.shortcuts import render, redirect
from .models import UserModel
from django.contrib.auth import get_user_model
from django.contrib import auth
from django.contrib.auth.decorators import login_required # 추가


@login_required # 로그인되어 있어야 접근할 수 있는 함수
def logout(request):
    auth.logout(request) # django 1줄!
    return redirect('/')
  • 기본페이지로 redirect 해주면
    사용자가 있는지 없는지를 확인하고 나서 (인증)
    있다면 tweet으로, 없다면 로그인 페이지로 연결한다.

  • 로그아웃은 로그인이 되어야만 쓸 수 있는 기능이므로
    login_required를 import하여 추가한다.


user/views.py

from django.shortcuts import render, redirect
from .models import UserModel
from django.contrib.auth import get_user_model
from django.contrib import auth
from django.contrib.auth.decorators import login_required # 추가


@login_required # 로그인되어 있어야 접근할 수 있는 함수
def logout(request):
    auth.logout(request)
    return redirect('/')

user/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('sign-up/', views.sign_up_view, name='sign-up'),
    path('sign-in/', views.sign_in_view, name='sign-in'),
    path('logout/', views.logout, name='logout'), # 추가
]

templates/base.html

        <form class="form-inline my-2 my-lg-0">
            {% if not user.is_authenticated %} # 사용자가 없다면 sign-in/up을 보여주고 
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                    <a class="nav-link" href="/sign-in"> Sign In <span class="sr-only"></span></a>
                </li>
                <li class="nav-item active">
                    <a class="nav-link" href="/sign-up"> Sign Up <span class="sr-only"></span></a>
                </li>
            </ul>
            {% else %} # 사용자가 있다면 
                <ul class="navbar-nav mr-auto">
                    <li class="nav-item disabled">
                        <span class="nav-link">
                            {{ user.username }} 님 반갑습니다!
                        </span>
                    </li>
                    <li class="nav-item active">
                        <a class="nav-link" href="/logout"> 로그아웃 </a>
                    </li>
                </ul>
            {% endif %}
        </form>
    </div>
</nav>
{% block content %}

{% endblock %}

</body>
</html>

로그아웃 누르면 로그아웃 함수가 실행되며 기본 페이지로 redirect 된다.
기본 페이지에서 로그인 여부 확인한 후 로그인 페이지로 이동된다.

profile
Español, Inglés, Coreano y Python

0개의 댓글