LoginSignup
0
0

【Django】Djangoを用いたWebサービス(ユーザー登録)

Last updated at Posted at 2023-05-30

はじめに

Djangoを用いたWebアプリケーションでユーザー登録機能を実装しました。
Djangoはデフォルトでユーザーモデルが設定されていますが、今回はDjango-Allauthを用いて実装。
実装内容とCustomUserを実装する上でのtipを書いていきます。

概要

ユーザー登録の基礎にはAllauthを使用。
CustomUserモデルの追加にはAbstractUserを使用。
Djangoでは、ユーザーモデルの変更にはAbstractUserAbstractBaseUserのどちらかを継承する方法がりますが、今回の変更はフィールドの追加のみであり、かつ早く開発したかったためAbstractUserを使用しました。

usersアプリの追加

setting.py
INSTALLED_APPS = [
    (中略  以下追加)
    #django-allauth
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    #myapp
    'teamup_site',
]

...
AUTH_USER_MODEL = 'teamup_site.CustomUser' # 追加

Setting.pyのINSTALLED_APPに、今回用いるallauthを適応させます。

その下に、デフォルトのユーザーモデルではなく、teamup_webアプリ内のCustomUserモデルを使用すると記述します。

models

CustomUserモデルを作成していきます。

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

from django.utils import timezone
from datetime import date

class Gender(models.TextChoices):
    MAN     = 'Man'
    WOMEN   = 'Women'
    OTHER   = 'Other'

class Work(models.TextChoices):
    SOFTWARE_ENGINEER       = 'Software Engineer'
    DESIGNER                = 'Designer'
    PLANNER                 = 'Planer'
    INFRASTRUCTURE_ENGINNER = 'Infrastructure Engineer'
    DATA_ENGINNER           = 'Data Engineer'

class CustomUser(AbstractUser, PermissionsMixin):
    username        = models.CharField(max_length=25)
    WORK_CHOICES    =[(w.value, w.name) for w in Work]
    your_job        = models.CharField(max_length=25, choices=WORK_CHOICES, default=Work.SOFTWARE_ENGINEER)
    GENDER_CHOICES  = [(g.value, g.name) for g in Gender]
    your_gender     = models.CharField(max_length=25, choices=GENDER_CHOICES, default=Gender.OTHER)
    birth_date      = models.DateField(blank=True, null=True,)
   
    def __str__(self):
        return self.username

書き方は、普通です。
特に追加する必要がない場合は、passで大丈夫です。

今回は、ユーザーの情報の他に職業の選択と性別の選択を追加しました。
どちらともTextChoicesを用いて列挙型で指定。

もし、デフォルトのユーザーモデルのみで良い場合でもCustomUserを作成することをおすすめします。
一度マイグレーションをするとDBの参照先モデルはデフオルトのユーザーモデルとなります。そこから追加したCustomUserモデルに変更するのはとても大変な作業なので、事前にCustomUserモデルを作成して参照先をそちらに変えておけば今後の変更等がより簡単になります。

forms

forms.py
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser

class SignupForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = ["username", "email"]

ここではユーザー登録後、プロフィールページにて情報を入力すためのフォームを作成します。
とりあえず

admin

admin.py
from django.contrib import admin
from .models import CustomUser

# Register your models here.

admin.site.register(CustomUser)

最後に、管理ページでCustomUserをCRUDするためにCustomUserを指定します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0