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 にリダイレクトします。

challenge icon

チャレンジ

簡単
  • 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>
quiz icon腕試し

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

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

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