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, benannt als 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 beantwortet eine GET-Anfrage mit 405 Methode nicht erlaubt.

Eine Schaltfläche, die etwas ändert, ist ein kleines POST-Formular, auch wenn es keine Felder enthält. Sein action 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.

challenge icon

Aufgabe

Einfach
  • In base.html befindet sich unter Signed in as ... eine Schaltfläche Log out, mit der der Benutzer abgemeldet wird.
  • Nach dem Abmelden wird der Besucher zu / weitergeleitet.

Klicke auf Run, melde dich als ada (Passwort coddy-pass-123) an und klicke dann auf Abmelden.

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