セミナー情報の登録については一通り出来たので、ユーザーのログイン・ログアウトの機能を追加していきます。
まず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の管理画面からすることになります。様々なユーザーでログインして確かめましょう。