DjangoはPythonで開発されたオープンソースのウェブアプリケーションフレームワークで、多くの便利な機能がすでに内蔵されています。その中でも、ユーザー認証やセキュリティ機能などの重要な要素がすでに用意されており、プラグインや拡張機能を活用することで、さらに機能を強化することができます。

Djangoでのユーザー登録機能の実装

まずは、Djangoプロジェクトを作成し、設定を行います。以下のコマンドを実行します。

% python -m venv venv
% source venv/bin/activate
(venv)% pip install --upgade pip
(venv)% pip install Django
(venv)% django-admin startproject project .

次に、settings.pyを編集します。

ALLOWED_HOSTS = ['*']

開発用サーバーを起動してみましょう。

(venv)% python manage.py runserver

ブラウザで http://127.0.0.1:8000 にアクセスし、デフォルト画面が表示されたらOKです!

カスタムユーザーの作成

Djangoフレームワークでは、Djangoのデフォルトのユーザーモデルではなく、カスタムユーザーモデルを作成することが推奨されています。Djangoアプリケーション開発の初期段階でカスタムユーザーモデルを作成していると、後にユーザーに年齢や住所などの属性を追加させたい場合に、変更が容易になる等のメリットがあります。

以下のコマンドで accounts アプリを作成します。

(venv)% python manage.py startapp accounts

settings.pyINSTALLED_APPSaccounts を追加します。また、この後作成するカスタムユーザーを認証用ユーザーモデルとして使用するため、その設定を追加します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accounts' # 追加
]
AUTH_USER_MODEL = "accounts.User" # カスタムユーザーを認証用ユーザーとして登録

最後に、カスタムユーザーモデルを作成します。

from django.db import models
from django.contrib.auth.models import (BaseUserManager, AbstractBaseUser, PermissionsMixin)
from django.utils.translation import gettext_lazy as _

class UserManager(BaseUserManager):
    def _create_user(self, email, account_id, password, **extra_fields):
        email = self.normalize_email(email)
        user = self.model(email=email, account_id=account_id, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, email, account_id, password=None, **extra_fields):
        extra_fields.setdefault('is_active', True)
        extra_fields.setdefault('is_staff', False)
        extra_fields.setdefault('is_superuser', False)
        return self._create_user(
            email=email,
            account_id=account_id,
            password=password,
            **extra_fields,
        )

    def create_superuser(self, email, account_id, password, **extra_fields):
        extra_fields['is_active'] = True
        extra_fields['is_staff'] = True
        extra_fields['is_superuser'] = True
        return self._create_user(
            email=email,
            account_id=account_id,
            password=password,
            **extra_fields,
        )

class User(AbstractBaseUser, PermissionsMixin):
    account_id = models.CharField(
        verbose_name=_("account_id"),
        unique=True,
        max_length=10
    )
    email = models.EmailField(
        verbose_name=_("email"),
        unique=True
    )
    first_name = models.CharField(
        verbose_name=_("first_name"),
        max_length=150,
        null=True,
        blank=False
    )
    last_name = models.CharField(
        verbose_name=_("last_name"),
        max_length=150,
        null=True,
        blank=False
    )
    birth_date = models.DateField(
        verbose_name=_("birth_date"),
        blank=True,
        null=True
    )
    is_superuser = models.BooleanField(
        verbose_name=_("is_superuer"),
        default=False
    )
    is_staff = models.BooleanField(
        verbose_name=_('staff status'),
        default=False,
    )
    is_active = models.BooleanField(
        verbose_name=_('active'),
        default=True,
    )
    created_at = models.DateTimeField(
        verbose_name=_("created_at"),
        auto_now_add=True
    )
    updated_at = models.DateTimeField(
        verbose_name=_("updateded_at"),
        auto_now=True
    )

    objects = UserManager()

    USERNAME_FIELD = 'account_id' # ログイン時、ユーザー名の代わりにaccount_idを使用

以上で、Python Djangoでのユーザー登録機能の実装が完了しました。これにより、ウェブアプリケーション開発において煩わしい認証機能の実装を効率的に行うことができます。.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です