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/ o nazwie logout: kończy ono sesję, więc plik cookie nie wskazuje już użytkownika.
Zwykły link nie wystarczy. Link wysyła żądanie GET, a żądanie GET nigdy nie powinno niczego zmieniać: strona mogłaby ukryć obraz, którego adres jest adresem URL wylogowania, i wylogować użytkownika. Dlatego LogoutView akceptuje tylko żądania POST, a na żądanie GET odpowiada kodem 405 Method not allowed.
Przycisk, który coś zmienia, to mały formularz POST, nawet jeśli nie zawiera pól. Atrybut action określa adres URL, na który formularz 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.
Wyzwanie
Łatwy- W pliku
base.html, pod tekstemSigned in as ...przyciskLog outwylogowuje użytkownika. - Po wylogowaniu odwiedzający trafia na
/.
Naciśnij Run, zaloguj się jako ada (hasło coddy-pass-123), a następnie naciśnij Log out.
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>
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