로그인/로그아웃은 user 기능이므로 user 앱에 작성한다.
django logout이 아니라면, request에 사용자가 있는지 여부를 session에서 확인해야 하고 if문도 많이 들어갈 것.
그러나 django 기능을 쓰면 1라인으로 처리할 수 있다.
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하여 추가한다.
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('/')
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'), # 추가
]
<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 된다.
기본 페이지에서 로그인 여부 확인한 후 로그인 페이지로 이동된다.