前回の続きで、くじ引きアプリを作成していきます。
【前回のまとめ】
・ログイン/ログアウト画面の準備をする
【今回の作業】
・ログイン/ログアウト画面を作成する
前回はログイン/ログアウト画面の準備しましたので、今回はログイン/ログアウト画面を作成していきたいと思います。
設定は今までの差分を利用しますので、初めから設定したい方は以下記事を参照してください。
・ログイン/ログアウト画面の作成する
【手順】
1.ログイン・ログアウト画面の共通テンプレートを作成する
まずはログイン・ログアウト画面で利用するテンプレートを作成します。
内容はbase.htmlと共通する部分が多いので、そのファイルをコピーして作成します。
ファイル:myapptdl>templates>layout.html
コード:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css'>
<style>body {padding-top:80px;}</style>
<title>くじ引き</title>
</head>
<body>
<nav class='navbar navbar-expand -sm navbar-dark bg-dark fixed-top'>
<a class='navbar-brand' href='{% url "tdl:index" %}'>くじ引き</a>
# ---base.htmlをコピーした場合は以下より新規追加コード---
<ul class='navbar-nav'>
{% if user.is_authenticated %}
<li class='nav-item'>
<span class='navbar-text'>{{ user }} - </span>
</li>
<li class='nav-item'>
<a href='{% url "logout" %}' class='logout nav-link'>Logout</a>
{% else %}
<a href='{% url "login" %}' class='login nav-link'>Login</a>
{% endif %}
# ---ここまで---
</nav>
<div class='container'>
{% block content %}
{% endblock %}
</div>
</body>
</html>
各コードの説明
| コード | 説明 |
| <ul class=’navbar-nav’> | ナビゲーションバーを利用します |
| {% if user.is_authenticated %} | ユーザがログインしている場合に次のコードを実行します。 |
| <li class=’nav-item’><span class=’navbar-text’>{{ user }} – </span> |
ナビゲーションバーの上にテキストで、「ユーザ名」を表示します。 |
| <li class=’nav-item’><a href='{% url “logout” %}’ class=’logout nav-link’>Logout</a> |
ログアウト用にリンクを「Logout」で表示します。 |
|
{% else %}
|
ユーザがログインしていない場合に次のコードを実行します。 |
|
<a href='{% url “login” %}’ class=’login nav-link’>Login</a>
|
ログイン用のリンクを「Login」で表示します。 |
2.ログイン用テンプレートを作成する
次はログイン用テンプレートを作成します。
ファイル:myapptdl>templates>registration>login.html
コード:
{% extends '../layout.html' %}
{% block content %}
<h1>ログイン</h1>
<section class='common-form'>
{% if form.errors %}
<p class='error-msg'>ユーザ名とパスワードが一致していません。もう一度試してください。</p>
{% endif %}
{% if next %}
{%if user.is_authenticated %}
<p class='error-msg'>あなたのアカウントにはこのページへのアクセス権がありません。,
続行するには、アクセス権のあるアカウントでログインしてください。</p>
{% else %}
<p class='error-msg'>このページを表示するにはログインしてください。</p>
{% endif %}
{% endif %}
<form action='{% url "login" %}' method='post'>
{% csrf_token %}
<input type='hidden' name='next' value='{{ next }}' />
{{ form.as_p }}
<button type='submit'>Login</button>
</form>
</section>
{% endblock %}
| コード | 説明 |
| {% if form.errors %} | もしフォームに入力エラーがあった場合、次の処理を行います。 |
| <p class=’error-msg’>ユーザ名とパスワードが一致していません。もう一度試してください。</p> | メッセージを表示します |
| {%if user.is_authenticated %} |
もし、ユーザがログイン状態であった場合、次の処理を行います。 |
| <p class=’error-msg’>あなたのアカウントにはこのページへのアクセス権がありません。, 続行するには、アクセス権のあるアカウントでログインしてください。</p> |
メッセージを表示します |
|
{% else %}
|
ユーザがログインしていない場合に次のコードを実行します。 |
|
<p class=’error-msg’>このページを表示するにはログインしてください。</p>
|
メッセージを表示します |
| <form action='{% url “login” %}’ method=’post’> |
ログイン用のフォーム画面を準備しています。 |
3.ログアウト用テンプレートを作成する
ログアウト用テンプレートを作成します。
ファイル:myapptdl>templates>registration>logged_out.html
コード:
{% extends '../layout.html' %}
{% block content %}
<h1>ログアウト</h1>
<p>サイトご利用ありがとうございます。</p>
<p><a href='{% url "login" %}'>再ログイン</a></p>
{% endblock %}
| コード | 説明 |
| <p>サイトを利用してくれてありがとうございます。</p> | メッセージを表示します |
| <p><a href='{% url “login” %}’>再ログイン</a></p> | 再ログインリンクを表示します。 |
以上で設定は終わりなので、サーバを起動して確認します。
cd myapp python manage.py runserver
次の手順で確認していきます。
- 以下URLにブラウザでアクセスする
http://localhost:8000/accounts/login - ログイン画面が表示される
- ユーザとパスワードを入力してログインする
- ログイン後、リダイレクトされて一覧画面に遷移する
- もう一度、以下のURLに移動する
http://localhost:8000/accounts/login - ログイン画面のナビゲーションバーに現在ログインしているユーザが表示される
- 最後にログアウトリンクをクリックする
- ログアウトできることを確認する
確認した結果を動画に取りました。
以上で今回の目的であるログイン・ログアウト画面を作成することができました。
次回は、サインアップ画面を作成したいと思います。
ありがとうございました。
【参考にしたサイトと本】

コメント