今回のテーマは「LogoutViewを使用してログアウト機能を実装する」です。前回扱ったログイン処理と対となるログアウト処理を扱います。今回もDjangoに組み込まれたLogoutViewを使用することでコーディングの手間をかけずに実装していきます。
※本ページは「LoginViewを使用してログイン画面を作成する」まで読まれた方を対象としています。そのためサンプルソースコードが省略されている場合があります
LogoutViewについて
django.contrib.auth.views.LogoutViewには以下のクラス変数があり、この値を継承クラスでオーバライドしたり、as_viewメソッドで設定することで制御することが出来ます。
- next_page: ログアウト後のリダイレクト先URL。デフォルトはNone
- redirect_field_name: POSTやGETでリダイレクト先を指定するときのキー。デフォルトはnext
- template_name: テンプレート名。デフォルトはregistration/logged_out.html
- extra_context: 追加コンテキスト。デフォルトはNone
今回はすべてデフォルトの状態で使ってみます。認証機能のカスタマイズは本章の後半で扱うので、それまでお待ち下さい。
ログアウト画面用のテンプレート作成
ではログアウト画面用のテンプレートを作成していきます。django.contrib.auth.views.LogoutViewのデフォルトテンプレートは’registration/logged_out.html’ですので、その名前で作成していきます。
templates/registration/logged_out.html
{% extends 'base/base.html' %}
{% block title %}ITについて切磋琢磨する掲示板 - {{ block.super }}{% endblock %}
{% block content %}
<div class="ui grid stackable">
<div class="eleven wide column">
<div class="ui breadcrumb">
<a href="{% url 'base:top' %}" class="section">TOP</a>
<i class="right angle icon divider"></i>
<a class="active section">ログアウト完了</a>
</div>
<div class="ui segment">
<div class="content">
<div class="header"><h3>ログアウトしました。</h3></div>
<p><a href="{% url 'base:top' %}">TOPへ戻る</a></p>
</div>
</div>
</div>
{% include 'base/sidebar.html' %}
</div>
{% endblock %}
URLの確認
LoginViewを使用してログイン画面を作成するの「django.contrib.auth.urlsをインクルードする」は必ず設定しておいて下さい。
前回設定しているのでURLに関しては設定不要ですが、本ページから見た読者のためにmysite.pyを表示しておきます。
mysite/urls.py(一部抜粋)
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('accounts/', include('accounts.urls')),
path('', include('base.urls')),
path('thread/', include('thread.urls')),
path('api/', include('api.urls')),
path('search/', include('search.urls')),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
動作確認
では動作を確認してみましょう。
ログインした状態でヘッダーの「ログアウト」を押してログアウト画面に遷移すればOKをです。
ヘッダーのログアウトボタン押下
ログアウト画面に遷移
最後に
さてログイン、ログアウトについては実装出来ましたね。次回はパスワード変更機能を実装していきますよ。
Sponsored Link