22강 login, logout 구현

짜부·2023년 1월 16일

작정하고 장고

목록 보기
29/41

1. accountapp/urls.py수정

  • 원래는 views.py에서 상속받고 작성해야하지만 login, logout은 간단하기 때문에 바로 urls.py에서 수정해도 됩니다.
	urlpatterns = [
        path('login/',LoginView.as_view(template_name='accountapp/login.html'),name='login'),
        path('logout/',LogoutView.as_view(),name='logout'),
]
  • loginview같은 경우에는 ()안에 템플릿 지정해주기

2. login.html 작성하기

{% 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 %}

{{form}} : loginView에서 기본 제공

redirect 우선순위 url

  • 설정안하면 자동적으로 accounts/profile/이라는 url로 이동. (정의하지 않았으므로 에러)
  1. parameter중에서 next라는 이름을 가진 value를 찾고 있다면 그 경로로 이동
  2. 없을시 settings.py에 있는 LOGIN_REDIRECT_URL로 이동함
  3. 그것도 없을시 Default값으로 이동

3. next설정, header.html 수정

header.html

		<div>
            <span>nav1</span>
            <span>nav2</span>
            <span>nav3</span>
            {% 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 %}
        </div>

?next={{request.path}} : 지금 존재하는 url을 전달해서 다시 돌아올수 있게 합니다.

😭만약 account/login url로 바로이동시 next parameter가 없으므로 에러가 뜹니다.
이것을 해결하기위해 settings.py에 있는 LOGIN_REDIRECT_URL 를 설정합니다.

settings.py 수정

LOGIN_REDIRECT_URL = reverse_lazy('accountapp:hello_world')
LOGIN_REDIRECT_URL = reverse_lazy('accountapp:login')
profile
화이팅

0개의 댓글