ログアウト
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にリダイレクトします。デフォルト値はありません。設定しない場合は、管理サイトのログアウトページが表示されます。settings.pyで"/"に設定してください。
チャレンジ
簡単Log outボタンを追加します。
base.htmlで、Signed in asの下に、{% url 'logout' %}にPOSTするフォームを追加します。フォームには{% csrf_token %}とLog outボタンを含めます。settings.pyで、LOGOUT_REDIRECT_URLを"/"に設定します。
adaとしてログインし(パスワードはcoddy-pass-123)、Log outを押します。ヘッダーに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プレイグラウンド