ログアウト
CoddyのDjangoジャーニー「ユーザーとアカウント」セクションの一部。レッスン 3/16。
ログイン中のユーザーには、ログアウトする方法がありません。同じ include() によって /accounts/logout/ が追加され、名前は logout です。これはセッションを終了するため、Cookieはユーザーを指さなくなります。
単なるリンクでは不十分です。リンクは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 にリダイレクトします。
チャレンジ
簡単base.htmlで、Signed in as ...の下にあるLog outボタンを押すと、ユーザーはログアウトします。- ログアウトすると、訪問者は
/に移動します。
Runを押し、ada(パスワードはcoddy-pass-123)でログインしてから、ログアウトを押してください。
自分で試してみよう
{% 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プレイグラウンド