【Django】クラスベースビュー(class-based view):LogoutViewを使用したログアウト機能の実装

概要

クラスベースビュー(class-based view)でログアウト機能を作成したのでまとめた。
ログアウト機能は、Djangoがもともと用意しているLogoutViewクラスを使用する。
LoginViewと同様にviews.pyにビュー処理を記述する必要がなく、手軽にログアウト機能を実装できる。

あわせて読みたい

概要 クラスベースビュー(class-based view)でログイン機能を作成したのでまとめた。 ログイン機能は、Djangoがもともと用意しているLoginViewクラスを使用する。 LoginViewの場合、ListViewのよ[…]

 

前提

以下の記事の続きになる。

あわせて読みたい

概要 クラスベースビュー(class-based view)で会員登録機能を作成したのでまとめた。 会員登録機能は、Djangoがもともと用意しているCreateViewクラスを継承して作成する。 CreateViewをどのように[…]

 

 

ログアウト機能処理イメージ

処理内容

ログインしたユーザーのみ利用できるタスク一覧画面に【ログアウト】ボタンを用意する。
【ログアウト】ボタンを押下すると、ログインしている状態を解除する。

内部処理としてはログインした状態だとDjangoはセッション情報を持っているが、LogoutViewの中でセッション情報を削除している。

 

画面

▲ログインユーザーのみ表示できるタスク一覧画面

 

▲ログアウトすると、ログイン画面に遷移する

 

 

ログアウト機能の実装

サーバー

accounts/urls.py


from django.urls import path
from . import views
from django.contrib.auth.views import LoginView, LogoutView

urlpatterns = [
    path("login/", LoginView.as_view(), name="login"),
    path("signup/", views.SignupView.as_view(), name="signup"),
    path("logout/", LogoutView.as_view(), name="logout"),
]

ログアウトURLにLogoutViewの処理を紐づける。

settings.py


(略)
LOGOUT_REDIRECT_URL = "login"

ログアウトした際の遷移先を定義する。
上記はaccounts/urls.pyに定義されているloginビューを指定している。

 

画面側

todoapps/templates/todo/top.html


(略)
<div class="container mt-5">
  <h2 class="text-center">タスク一覧</h2>
  <a href="{% url 'logout' %}" id="logout" class="btn btn-primary mb-3 mx-3">ログアウト</a>
(略)

タスク一覧画面にログアウトボタンを用意する。
ログアウトURLへは以下のようにGETリクエストを送っている。

href="{% url 'ビューの名前' %}"

ビューの名前はログアウト処理を指定している。

以上でログアウト処理を実装できる。

 

スポンサーリンク