Abmelden
Teil des Abschnitts Benutzer und Konten der Django-Journey von Coddy. Lektion 3 von 16.
Ein angemeldeter Benutzer kann sich nicht abmelden. Dasselbe include() hat /accounts/logout/ hinzugefügt, mit dem Namen logout: Es beendet die Sitzung, sodass das Cookie nicht mehr auf einen Benutzer verweist.
Ein einfacher Link reicht nicht aus. Ein Link sendet eine GET-Anfrage, und eine GET-Anfrage sollte niemals etwas ändern: Eine Seite könnte ein Bild verbergen, dessen Adresse deine Abmelde-URL ist, und dich so abmelden. Deshalb akzeptiert LogoutView nur POST-Anfragen, und eine GET-Anfrage führt zu 405 Methode nicht zulässig.
Eine Schaltfläche, die etwas ändert, ist ein kleines POST-Formular, auch wenn es keine Felder enthält. Sein action-Attribut gibt die URL an, an die es die Anfrage sendet, sodass es auf jeder Seite stehen kann:
<form method="post" action="{% url 'cart:empty' %}">
{% csrf_token %}
<button type="submit">Empty cart</button>
</form>Nach der Abmeldung leitet Django zu LOGOUT_REDIRECT_URL weiter. Dafür gibt es keinen Standardwert: Ohne diese Einstellung wird die Abmeldeseite der Administration angezeigt. Setze den Wert in settings.py auf "/".
Aufgabe
EinfachFüge eine Schaltfläche Log out hinzu.
- Füge in
base.htmlunterSigned in asein Formular hinzu, das eine Anfrage an{% url 'logout' %}sendet, mit{% csrf_token %}und einer SchaltflächeLog out. - Setze in
settings.pyLOGOUT_REDIRECT_URLauf"/".
Melde dich als ada an (Passwort coddy-pass-123) und klicke auf „Abmelden“: In der Kopfzeile steht You are not signed in.
Probier es selbst
{% 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>
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Benutzer und Konten
Übe selbstständig: Django-Playground