Django | ログインフォーム ~Djangoでログアウトを実装してみる
- 2023.08.19
- Django

前回の続きとして、ログアウトを実装します。
目次
手順
以下に手順を示します。
1)view.pyの編集
LogoutViewをインポートします。
from django.contrib.auth.views import LoginView,LogoutView
ログアウト時に logout.htmlを表示するようにします。
class Logout(LogoutView): #LogoutViewクラスを継承
template_name = 'template/logout.html'
view.pyは以下のようになります。
#LoginRequredMixin:
#Loginしていない状態で topページにアクセスした場合、loginページへリダイレクトさせる
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
from django.contrib.auth.views import LoginView,LogoutView
from .forms import LoginForm
class Login(LoginView): #LoginViewクラスを継承
form_class = LoginForm #先ほど作成したLoginFormクラスを読み込む
template_name = 'template/login.html' #Loginフォームのテンプレート
class top(LoginRequiredMixin, TemplateView):
template_name = 'template/top.html'
login_url = '/login/' #リダイレクト先
class Logout(LogoutView): #LogoutViewクラスを継承
template_name = 'template/logout.html'
3)templateフォルダに「logout.html」を作成する
今回は以下のように記載します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログアウト</title>
</head>
<body>
<p>ログアウトしました</p>
<a href="{% url 'login' %}"><p>ログイン画面へ戻る</p>
</a>
</body>
</html>
リンクに関しては、以下のように記述することができます。
URL名は urls.pyで指定したnameです。
<a href="{% url 'URL名' %}">
4)templateフォルダに「top.html」を編集する
top.htmlに「ログアウトリンク」を追加します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン成功</title>
</head>
<body>
<p>ログイン成功しました</p>
<hr>
<a href="{% url 'logout' %}"><p>ログアウト</p></a>
</body>
</html>
3)urls.pyの編集
logoutを追記します。
from django.contrib import admin
from django.urls import path
from app0001 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('top/', views.top.as_view(), name='top'),
path('login/', views.Login.as_view(), name='login'),
path('logout/', views.Logout.as_view(), name='logout'),
]
4)setting.pyの編集
LOGOUT_REDIRECT_URLを追加します。
#------------------------------------------------------------
# ログインの設定
#------------------------------------------------------------
# 1)ログインしていないユーザがアクセスした際のリダイレクト先URL
LOGIN_URL = 'login'
# 2)ログイン成功後のリダイレクト先URL
LOGIN_REDIRECT_URL = 'top'
# 3)ログイン成功後のリダイレクト先URL
LOGOUT_REDIRECT_URL = 'logout'
動作検証
それぞれ確認してみます。
ログイン成功時
以下のようにログアウトが表示されます。

ログアウト時
以下のような画面が表示されます。

ログアウトした状態でtopへアクセスした場合
以下のように「?next=/top/」となり、login画面にリダイレクトされていることが分かります。

今回は以上です!
エラー: データの取得に失敗しました。
-
前の記事
Django | ログインフォーム ~Djangoでログインを実装してみる 2023.08.19
-
次の記事
Django | Djangoでログインユーザ情報を取得/表示してみる 2023.08.19