3-9. LogoutViewで作成したログアウト画面をカスタマイズする

今回のテーマは「ログアウト画面をカスタマイズする」です。ここまではログイン画面と同様にログアウト画面も修正していきます。今回もLogoutViewを使用するケースとLogoutViewを継承するクラスを作成するケースとで分けたいと思います。

※本ページは「LoginViewで作成したログイン画面をカスタマイズする」まで読まれた方を対象としています。そのためサンプルソースコードが省略されている場合があります。


URLのカスタマイズ

もしURLが修正されていない場合はLoginViewで作成したログイン画面をカスタマイズするの「URLのカスタマイズ」を行って下さい。

ケース1:LooutViewを使用してas_view()でプロパティを渡す

このケースではビューを自作する必要はありません。as_view関数でLogoutViewのクラス変数を書き換える方法です。

accounts/urls.py(一部抜粋)


  urlpatterns = [
      # copy from django.contrib.auth.urls.py
      path('login/', views.CustomLoginView.as_view(), name='login'),
-     path('logout/', av.LogoutView.as_view(), name='logout'),
+     path('logout/', av.LogoutView.as_view(
+         template_name='regstration/logged_out.html',
+         next_page='/'
+     ), name='logout'),
  
      path('password_change/', av.PasswordChangeView.as_view(), name='password_change'),
      path('password_change/done/', av.PasswordChangeDoneView.as_view(), name='password_change_done'),
  
      path('password_reset/', av.PasswordResetView.as_view(), name='password_reset'),
      path('password_reset/done/', av.PasswordResetDoneView.as_view(), name='password_reset_done'),
      path('reset///', av.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
      path('reset/done/', av.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
  
      path('create/', views.UserCreateView.as_view(), name="create"),
      path('profile/', views.UserProfileView.as_view(), name="profile"),
      path('change/', views.UserChangeView.as_view(), name="change"),
  ]

今回はform_classのみ書き換えましたがtemplate_name等も書き換え可能です。LoginViewの詳細は「」をご覧ください。

ケース2:LogoutViewを継承するビュークラスを作る

次にLoginViewを継承して新しいビュークラスを作る場合を考えましょう。as_view関数でプロパティを書き換える方法よりも応用の効く方法です。accounts/views.pyに書き加えていきます。

accounts/views.py(一部抜粋)


# importはページトップ
- from django.contrib.auth.views import LoginView
+ from django.contrib.auth.views import LoginView, LogoutView

+ class CustomLogoutView(LogoutView):
+     template_name = 'registration/logged_out.html'
+     next_page = '/'

accounts/urlsも書き換えます。
accounts/urls.py(一部抜粋)


  urlpatterns = [
      # copy from django.contrib.auth.urls.py
      path('login/', views.CustomLoginView.as_view(), name='login'),
-     path('logout/', av.LogoutView.as_view(
-         template_name='regstration/logged_out.html',
-         next_page='/'
-     ), name='logout'),
+     path('logout/', views.CustomLogoutView.as_view(), name='logout'),
  
      path('password_change/', av.PasswordChangeView.as_view(), name='password_change'),
      path('password_change/done/', av.PasswordChangeDoneView.as_view(), name='password_change_done'),
  
      path('password_reset/', av.PasswordResetView.as_view(), name='password_reset'),
      path('password_reset/done/', av.PasswordResetDoneView.as_view(), name='password_reset_done'),
      path('reset///', av.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
      path('reset/done/', av.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
  
      path('create/', views.UserCreateView.as_view(), name="create"),
      path('profile/', views.UserProfileView.as_view(), name="profile"),
      path('change/', views.UserChangeView.as_view(), name="change"),
  ]

ログアウト後の遷移先を変更する

ログアウト後の遷移先はLogoutViewのnext_page変数を指定するかsettigs.pyのLOGOUT_REDIRECT_URLを指定することで設定出来ます。また、GETもしくはPOSTメソッドで’next’キーのパラメータを指定しても遷移します。優先順位としては

  1. GETもしくはPOSTで指定したnextパラメータ
  2. next_page
  3. LOGOUT_REDIRECT_URL

の順番となります。

最後に

ログアウト画面に関してはフォームもないので作業量は少ないです。カスタマイズがすくないのでLogoutViewをそのまま用いても支障は少ないと思います。次回はパスワード変更画面をカスタマイズしていきます。

Sponsored Link


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です