[申請承認アプリ]ログイン・ログアウト機能を追加

セミナー情報の登録については一通り出来たので、ユーザーのログイン・ログアウトの機能を追加していきます。

まずaccountのviewを下記の通り編集します。

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

class Login(LoginView):
	template_name="account/login.html"
	
class Logout(LogoutView):
	template_name="account/logout.html"

djangoではログイン・ログアウトのビューが予め用意されているのでそれを使います。

ログインの方のテンプレートはid、パスワードを入力するフォームページを指定します。

ログアウトの方はログアウト処理後に表示されるページを指定します。

login.htmlのサンプルは下記の通りです。

{% extends 'base/base.html' %}
{% load crispy_forms_tags %}

{%block content%}
<div class="card mx-auto" style="margin-top:150px; width: 100%;max-width: 330px;">
	<div class="card-body">
		<h4 class="card-title">ログイン</h4>
		{{ form.media }}
    	<form action="" method="POST">
        {% csrf_token %}
        {{ form|crispy }}
        <button type="submit" class="btn btn-primary">ログイン</button>
		</form>
	</div>
</div>
{%endblock%}

logout.htmlのサンプルは下記の通りです。

{% extends 'base/base.html' %}
{% load crispy_forms_tags %}

{%block content%}
<div class="card mx-auto" style="margin-top:150px; width: 100%;max-width: 330px;">
	<div class="card-body">
		<h4 class="card-title">ログアウトしました。</h4>
		<a class="btn btn-primary my-1 mt-3" href="{%url 'account:login'%}">再ログイン</a><br>
        <a class="btn btn-secondary my-1" href="{%url 'index'%}">ホームへ</a>
	</div>
</div>
{%endblock%}

そして、先程作成したviewのurlを設定していきます。accountのurls.pyを作成して下記の通りとします。

from django.urls import path
from .views import Login,Logout

app_name='account'
urlpatterns = [
    path('login/', Login.as_view(),name='login'),
    path('logout/', Logout.as_view(),name='logout'),
]

続いてconfigのurls.pyにインクルードしておきます。

from django.contrib import admin
from django.urls import path, include
from application.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('application/', include('application.urls')),
    path('account/', include('account.urls')),#追加
    path('tinymce/', include('tinymce.urls')),
    path('', index.as_view(),name="index"),#nameを追加
]

あと、ログイン処理が完了したときの遷移先はsettings.pyに記載する必要があるので追加しておきます。

LOGIN_REDIRECT_URL='index'

このindexはconfigのurls.pyで追加したname=”index”を指しています。これで、ログイン後はトップページに遷移するようになります。

最後にログインやログアウトのリンクを作成していきます。base.htmlを下記の通り編集しましょう。(navbarの部分のみ抜粋)

   <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
      <a class="navbar-brand" href="#">セミナー申込みサイト</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsDefault" aria-controls="navbarsDefault" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>

      <div class="collapse navbar-collapse" id="navbarsDefault">
        <ul class="navbar-nav mr-auto">
          <li class="nav-item">
            <a class="nav-link" href="/">Home</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="/admin">管理用</a>
          </li>
         </ul>
         <ul class="navbar-nav">
         <li class="nav-item d-block d-lg-none border-bottom"> </li>
          {%if user.is_authenticated %}
          <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          {{user.username}}
        </a>
        <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
          <a class="dropdown-item" href="{%url 'account:logout'%}">ログアウト</a>
          <a class="dropdown-item" href="#">Another action</a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
           {%else%}
           <li class="nav-item">
          <a class="nav-link" href="{%url 'account:login'%}">ログイン</a>
          </li>
          {%endif%}
        </ul>
      </div>
    </nav>

これでログイン・ログアウトの機能は追加されました。現状ではユーザーの追加・編集はdjangoの管理画面からすることになります。様々なユーザーでログインして確かめましょう。

コメントを残す

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