본문 바로가기
기타/django

작정하고 장고 - login, logout 구현

by 방배킹 2023. 5. 9.

22강 : login & logout 구현

accountapp urls.py

path('login/', LoginView.as_view(template_name='accountapp/login.html'), name='login'),
path('logout/', LogoutView.as_view(), name='logout'),

accountapp urls.py에 login, logout을 추가해준다.

{% extends 'base.html' %}

{% block content %}

    <div style="text-align: center">
        <div>
            <h4>Login</h4>
        </div>
        <div>
            <form action="" method="post">
                {% csrf_token %}
                {{ form }}
                <input type="submit" class="btn btn-primary">
            </form>
        </div>
    </div>

{% endblock %}

login.html을 만들어준다.

하지만 로그인을 하면 오류가 발생한다.

login, logout view에서 redirect하는 매커니즘은 다음과 같다.

next -> LOGIN_REDIRECT_URL -> Default

현재 아무런 설정을 안해놓았기 때문에 default값인 account/profile/로 이동을 하는것이다.

{% if not user.is_authenticated %}
        <a href="{% url 'accountapp:login' %}?next={{ request.path }}">
            <span>login</span>
        </a>
        {% else %}
        <a href="{% url 'accountapp:logout' %}?next={{ request.path }}">
            <span>logout</span>
        </a>
        {% endif %}

위 코드는 로그인이 되어있으면 로그아웃 버튼을 로그인이 안되어있으면 로그인 버트을 보여주는 코드이다.

해당 코드에서 next를 사용해 로그인/로그아웃을 했을때 이동할 경로를 설정해준다.


다음과 같이 주소창에 next 값이 생기고


로그인을 성공하면 원래 화면으로 돌아온다.

 


하지만 account/login/ 으로 접속을 해서 로그인을 시도하면 다시 문제가 발생한다.

해당 문제를 방지하기 위해 2번째 조건이였던 LOGIN_REDIRECT_URL를 다음과 같이 설정해준다.

LOGIN_REDIRECT_URL = reverse_lazy('accountapp:hello_world')
LOGOUT_REDIRECT_URL = reverse_lazy('accountapp:hello_world')

댓글