Menu
CoddyTech

Wylogowywanie

Część sekcji Użytkownicy i konta ścieżki Django w Coddy. Lekcja 3 z 16.

Zalogowany użytkownik nie ma możliwości wylogowania się. To samo include() dodało /accounts/logout/, nazwane logout: kończy ono sesję, więc plik cookie nie wskazuje już użytkownika.

Zwykły odnośnik nie wystarczy. Odnośnik wysyła żądanie GET, a żądanie GET nigdy nie powinno niczego zmieniać: strona mogłaby ukryć obraz, którego adres to URL wylogowania, i wylogować Cię. Dlatego LogoutView akceptuje tylko POST, a żądanie GET skutkuje błędem 405 Method not allowed.

Przycisk, który coś zmienia, to niewielki formularz POST, nawet bez pól. Jego action wskazuje URL, na który wysyła żądanie, więc może znajdować się na dowolnej stronie:

<form method="post" action="{% url 'cart:empty' %}">
    {% csrf_token %}
    <button type="submit">Empty cart</button>
</form>

Po wylogowaniu Django przekierowuje do LOGOUT_REDIRECT_URL. Ta wartość nie ma domyślnego ustawienia: jeśli jej nie podasz, zobaczysz stronę wylogowania panelu administracyjnego. Ustaw ją na "/" w pliku settings.py.

challenge icon

Wyzwanie

Łatwy

Dodaj przycisk Log out.

  1. W pliku base.html, pod tekstem Signed in as, dodaj formularz wysyłany metodą POST do {% url 'logout' %}, zawierający {% csrf_token %} i przycisk Log out.
  2. W pliku settings.py ustaw LOGOUT_REDIRECT_URL na "/".

Zaloguj się jako ada (hasło: coddy-pass-123) i naciśnij przycisk „Wyloguj się”: w nagłówku pojawi się tekst You are not signed in.

Spróbuj swoich sił

{% 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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Użytkownicy i konta

Poćwicz samodzielnie: Edytor online Django