Menu
CoddyTech

退出登录

本课属于 Coddy Django 学习旅程的“用户和账户”单元。第 3 课,共 16 课。

已登录的用户无法退出登录。同一个 include() 添加了 /accounts/logout/,其名称为 logout:它会结束会话,因此 Cookie 不再指向任何用户。

普通链接不行。链接会发送 GET 请求,而 GET 请求绝不应该改变任何内容:页面可以隐藏一张地址为你的退出登录 URL 的图片,从而让你退出登录。因此,LogoutView 只接受 POST 请求,GET 请求会得到 405 方法不允许。

要执行更改的按钮需要使用一个简单的 POST 表单,即使表单没有字段也一样。它的 action 指定了提交请求的 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 下方,添加一个使用 POST 方法提交到 {% url 'logout' %} 的表单,其中包含 {% 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 在线编辑器