로그아웃하기
Coddy Django 여정의 사용자와 계정 섹션에 포함된 레슨. 16개 중 3번째.
로그인한 사용자는 로그아웃할 방법이 없습니다. 같은 include()가 /accounts/logout/을 추가했으며, 이름은 logout입니다. 이 URL은 세션을 종료하므로 쿠키가 더 이상 사용자를 가리키지 않습니다.
일반 링크로는 해결할 수 없습니다. 링크는 GET 요청을 보내며, GET 요청은 절대로 어떤 것도 변경해서는 안 됩니다. 페이지에서 주소가 로그아웃 URL인 이미지를 숨겨 사용자를 로그아웃시킬 수도 있기 때문입니다. 따라서 LogoutView는 POST만 허용하며, GET 요청에는 405 메서드 허용 안 됨을 반환합니다.
무언가를 변경하는 버튼은 필드가 없어도 작은 POST 폼입니다. action은 POST 요청을 보낼 URL을 지정하므로 어느 페이지에나 놓을 수 있습니다.
<form method="post" action="{% url 'cart:empty' %}">
{% csrf_token %}
<button type="submit">Empty cart</button>
</form>로그아웃한 후 Django는 LOGOUT_REDIRECT_URL로 리디렉션합니다. 기본값은 없습니다. 이 값을 설정하지 않으면 관리자의 로그아웃 페이지가 표시됩니다. settings.py에서 "/"로 설정하세요.
챌린지
쉬움Log out 버튼을 추가하세요.
base.html에서Signed in as아래에{% url 'logout' %}으로 전송하는 양식을 추가하고,{% csrf_token %}과Log out버튼을 넣으세요.settings.py에서LOGOUT_REDIRECT_URL을"/"로 설정하세요.
ada로 로그인한 다음(비밀번호 coddy-pass-123) 로그아웃 버튼을 누르면 헤더에 You are not signed in.이라고 표시됩니다.
직접 해보기
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{% block title %}Notes{% endblock %}</title>
<link rel="stylesheet" href="{% static 'notes/style.css' %}">
</head>
<body>
<header>
<a class="brand" href="{% url 'notes:list' %}">Notes</a>
<nav>
<a href="{% url 'notes:create' %}">New note</a>
</nav>
<div class="account">
{% if user.is_authenticated %}
<p>Signed in as {{ user.username }}</p>
{% else %}
<p>You are not signed in.</p>
<a href="{% url 'login' %}">Log in</a>
{% endif %}
</div>
</header>
<main>
{% block content %}{% endblock %}
</main>
</body>
</html>
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
사용자와 계정의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드