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

Django | ログインフォーム ~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画面にリダイレクトされていることが分かります。

今回は以上です!

本日のAmazonおすすめ_Top10

2024-04-27 06:22:13時点