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')
'기타 > django' 카테고리의 다른 글
작정하고 장고 - DetailView를 활용한 개인 페이지 구현 (0) | 2023.05.11 |
---|---|
작정하고 장고 - Bootstrap을 이용한 Form 디자인 정리 (0) | 2023.05.10 |
작정하고 장고 - CreateView를 통한 회원가입 구현 (0) | 2023.05.08 |
작정하고 장고 - for 루프, 디버깅 (0) | 2023.04.11 |
작정하고 장고 - GET, POST (0) | 2023.04.10 |
댓글