Django ログイン認証の実装例

Djangoでログイン認証の実装例を紹介します。

Django ログイン認証 実装例画面イメージ

Django ログイン認証 事前準備

Djangoのログイン認証機能を使用して実現します。

DB作成

ログインするユーザー情報はDBに保存されますので、DBの作成が必要となります。
次のコマンドをコンソールより実行してください。

python manage.py migrate

Djangoが用意しているDB情報が生成されます。

ログインユーザー作成

またログインユーザーの作成も必要となります。
次のコマンドをコンソールより実行してください。

python manage.py createsuperuser

ユーザー名(ログインユーザーID)、メールアドレス、パスワード情報の入力が要求されますので、入力します。
メールアドレスは不要ならば未入力のまま決定しても問題ありません。

アプリ作成

今回実装用のアプリを生成します。
コンソールより以下を実行してください。(アプリ名は任意でOKです)

python manage.py startapp login_app

アプリ名は「login_app」前提で進めます。

Django ログイン認証 実装例詳細 - プロジェクト側

settings.py

LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'login_index'
LOGOUT_REDIRECT_URL = 'login_index'
項目概要
LOGIN_URL未ログイン時に遷移するURL
本来ログイン後で確認できるページに無断でアクセスされない為にも設定しておく必要があります。
LOGIN_REDIRECT_URLログインした後に遷移するURL
LOGOUT_REDIRECT_URLログアウトした後に遷移するURL

urls.py

urlpatterns = [
    path('login-app/', include("login_app.urls")),
]

既存の箇所に追加してください。

Django ログイン認証 実装例詳細 - アプリ側

ファイル構成

urls.py

from django.urls import path, include
from . import views

urlpatterns = [
    path('top/',  views.index, name='login_index'),
    path('', include('django.contrib.auth.urls')),
]

views.py

from django.shortcuts import render
from django.contrib.auth.decorators import login_required

@login_required
def index(request):
    return render(request, 'login_app/index.html')

@login_required」について
ログイン済みでなければ、LOGIN_URLで設定されたページに飛ばされるようになります。
ログインしなければ閲覧できないページは全てこれを付加しておきましょう。

login.html

ログインページはDjangoの機能を利用しますが、テンプレートはこちらで用意する必要があります。
配置場所は決まっており「/login_app/templates/registration」下です。
「registration」フォルダを作成し、その下に配置しましょう。

<!DOCTYPE html>
<html>

<head>
    <title>ログイン</title>
</head>

<body>
    <h1>ログイン</h1>

    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <br>
        <button type="submit">ログイン</button>
    </form>
</body>

</html>

index.html

<!DOCTYPE html>
<html>

<head>
    <title>メイン画面</title>
</head>

<body>
    <p>ログインユーザー:{{user.username}}</p>
    <br>
    <p><a href="{% url 'logout' %}">ログアウト</a></p>
</body>

</html>

コメント