Menu
CoddyTech

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 "/".

challenge icon

Aufgabe

Einfach

Füge eine Schaltfläche Log out hinzu.

  1. Füge in base.html unter Signed in as ein Formular hinzu, das eine Anfrage an {% url 'logout' %} sendet, mit {% csrf_token %} und einer Schaltfläche Log out.
  2. Setze in settings.py LOGOUT_REDIRECT_URL auf "/".

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>
quiz iconTeste dich selbst

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