Djangoでログイン認証の実装例を紹介します。
		
		Contents
		
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>
      
コメント