Menu
CoddyTech

ログアウト

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で"/"に設定してください。

challenge icon

チャレンジ

簡単

Log outボタンを追加します。

  1. base.htmlで、Signed in asの下に、{% url 'logout' %}にPOSTするフォームを追加します。フォームには{% csrf_token %}とLog outボタンを含めます。
  2. 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>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ユーザーとアカウントのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド