退出登录
本课属于 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 中将它设为 "/"。
挑战
简单添加一个 Log out 按钮。
- 在
base.html中的Signed in as下方,添加一个使用POST方法提交到{% url 'logout' %}的表单,其中包含{% 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 在线编辑器