Menu
CoddyTech

로그아웃하기

Coddy Django 여정의 사용자와 계정 섹션에 포함된 레슨. 16개 중 3번째.

로그인한 사용자는 로그아웃할 방법이 없습니다. 같은 include()가 /accounts/logout/을 추가했으며, 이름은 logout입니다. 이 URL은 세션을 종료하므로 쿠키가 더 이상 사용자를 가리키지 않습니다.

일반 링크로는 해결할 수 없습니다. 링크는 GET 요청을 보내며, GET 요청은 절대로 어떤 것도 변경해서는 안 됩니다. 페이지에서 주소가 로그아웃 URL인 이미지를 숨겨 사용자를 로그아웃시킬 수도 있기 때문입니다. 따라서 LogoutView는 POST만 허용하며, GET 요청에는 405 메서드 허용 안 됨을 반환합니다.

무언가를 변경하는 버튼은 필드가 없어도 작은 POST 폼입니다. action은 POST 요청을 보낼 URL을 지정하므로 어느 페이지에나 놓을 수 있습니다.

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

로그아웃한 후 Django는 LOGOUT_REDIRECT_URL로 리디렉션합니다. 기본값은 없습니다. 이 값을 설정하지 않으면 관리자의 로그아웃 페이지가 표시됩니다. settings.py에서 "/"로 설정하세요.

challenge icon

챌린지

쉬움

Log out 버튼을 추가하세요.

  1. base.html에서 Signed in as 아래에 {% url 'logout' %}으로 전송하는 양식을 추가하고, {% csrf_token %}과 Log out 버튼을 넣으세요.
  2. settings.py에서 LOGOUT_REDIRECT_URL을 "/"로 설정하세요.

ada로 로그인한 다음(비밀번호 coddy-pass-123) 로그아웃 버튼을 누르면 헤더에 You are not signed in.이라고 표시됩니다.

직접 해보기

{% 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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

사용자와 계정의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드