Django でのユーザー認証と承認の実装

ユーザー認証により、ユーザーは安全にログインしてアカウントにアクセスできます。一方、承認では、認証されたユーザーが実行できるアクションを決定します。Django は、これらの目的のために簡単に統合および拡張できる堅牢な認証システムを提供します。

デフォルトの認証システムの設定

Django のデフォルトの認証システムは、デフォルトでその構成に含まれています。次のアプリが settings.pyINSTALLED_APPS セクションにリストされていることを確認してください。

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

データベースを移行して必要なテーブルを設定します。

python manage.py migrate

ユーザーモデルの作成

Django には組み込みのユーザー モデルが用意されていますが、必要に応じてカスタム モデルを作成することもできます。デフォルトのモデルを使用するには:

from django.contrib.auth.models import User

# Creating a new user
user = User.objects.create_user(username='johndoe', password='securepassword')
user.email = 'johndoe@example.com'
user.save()

カスタム ユーザー モデルを作成するには、models.py を変更します。

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, blank=True, null=True)

settings.pyAUTH_USER_MODEL 設定を更新します。

AUTH_USER_MODEL = 'yourapp.CustomUser'

ユーザーのログインとログアウトの処理

Django には、ログインとログアウト用の組み込みビューが用意されています。次の URL を urls.py に追加します。

from django.urls import path
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

registration/login.html という名前のシンプルなログイン テンプレートを作成します。

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Log in</button>
</form>

権限によるアクセス制限

Django はアクセスを制限するためのパーミッション クラスを提供します。ビューでそれらを使用するには:

from django.contrib.auth.decorators import login_required, permission_required

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

@permission_required('yourapp.can_edit')
def edit_page(request):
    return render(request, 'edit_page.html')

権限は、Django 管理者またはシェルを使用して割り当てることができます。

from django.contrib.auth.models import User, Permission

user = User.objects.get(username='johndoe')
permission = Permission.objects.get(codename='can_edit')
user.user_permissions.add(permission)

結論

Django の認証および承認システムは、Web アプリケーションを保護するための強固な基盤を提供します。高度なカスタマイズが可能で、特定の要件に合わせて機能を拡張できます。このシステムを使用すると、プロジェクト内のユーザー アカウント、ロール、権限を簡単に管理できます。