Django: 認証システムとログイン機能

Django 4 の実践(アプリ開発編)

日付:2025年2月18日

Django 4 の認証システムを活用し、ユーザー登録、ログイン、ログアウト機能の実装方法を解説します。

目 次

はじめに

Django 4 には、ユーザー認証のための強力なシステムが標準で搭載されています。
本記事では、ユーザー登録・ログイン・ログアウト機能 の実装方法について解説します。

1. Django の認証システムとは?

Django は以下のような認証機能を提供しています。

Django の認証機能

  • ユーザー管理(django.contrib.auth
  • ログイン・ログアウト機能
  • パスワードハッシュ化
  • セッション管理
  • 認可(ユーザー権限管理)

2. ユーザーモデルの確認

Django では、デフォルトで User モデル が用意されています。

PYTHON
from django.contrib.auth.models import User # すべてのユーザーを取得 users = User.objects.all()

User モデルの主なフィールド

  • username: ユーザー名(必須)
  • email: メールアドレス
  • password: ハッシュ化されたパスワード
  • is_staff: 管理画面へのアクセス権
  • is_superuser: スーパーユーザー権限

3. ユーザー登録機能の実装

フォームの作成

Django には UserCreationForm という便利なフォームが用意されています。

forms.py:

PYTHON
from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User class SignUpForm(UserCreationForm): email = forms.EmailField(required=True) class Meta: model = User fields = ["username", "email", "password1", "password2"]

ビューの作成

views.py:

PYTHON
from django.shortcuts import render, redirect from django.contrib.auth import login from .forms import SignUpForm def signup_view(request): if request.method == "POST": form = SignUpForm(request.POST) if form.is_valid(): user = form.save() login(request, user) return redirect("home") else: form = SignUpForm() return render(request, "signup.html", {"form": form})

ポイント

  • UserCreationForm を利用し、簡単に登録フォームを作成
  • form.is_valid() でバリデーションを実施
  • login(request, user) で登録後に自動ログイン

4. ログイン・ログアウト機能の実装

Django は LoginViewLogoutView を提供しており、これを使うと簡単にログイン・ログアウトを実装できます。

urls.py に認証 URL を追加

PYTHON
from django.contrib.auth.views import LoginView, LogoutView from django.urls import path urlpatterns = [ path("login/", LoginView.as_view(template_name="login.html"), name="login"), path("logout/", LogoutView.as_view(next_page="login"), name="logout"), ]

ログインテンプレート (login.html)

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

ポイント

  • LoginViewpath("login/") で URL に関連付ける
  • LogoutView でログアウト後にログインページへリダイレクト

5. 認証済みユーザーのみアクセスを許可する

Django の login_required デコレーター を使用すると、ログイン済みのユーザーのみ特定のページにアクセスさせることができます。

PYTHON
from django.contrib.auth.decorators import login_required from django.shortcuts import render @login_required def dashboard_view(request): return render(request, "dashboard.html")

ポイント

  • @login_required をビューに適用すると、ログインしていないユーザーは自動的にログインページへリダイレクトされる
  • 設定ファイル settings.py に以下を追加すると、デフォルトのログインページを指定可能
PYTHON
LOGIN_URL = "/login/"

6. まとめ

  • Django 4 の認証システムを使うと、簡単に ユーザー管理・ログイン・ログアウト機能 を実装できる。
  • UserCreationForm を活用すると、簡単にユーザー登録フォームを作成可能。
  • LoginViewLogoutView を利用してログイン・ログアウト機能を実装。
  • login_required を適用すると、認証が必要なページへのアクセスを制限できる。