Python
Django

Djangoでは常にカスタムUserを使用すべき

カスタマイズUserを作成するために、公式ドキュメントに書かれてあったことを全体的にまとめてみた。

カスタムUserとは

DjangoではデフォルトのUserモデルが存在し、Adminサイトなどでもそれが使用されている。
デフォルトではユーザー名でユーザーを管理しているが、サービスによってはemail、もしくはそれ以外のunique属性などで管理する場合もあるだろう。
その場合、デフォルトのままでは認証方法が違ったり、必要な要素が足りなかったりする。
そういう時は、すでにあるUserの内容をカスタマイズする必要がある。

カスタムUserを使う場合の注意点

カスタムUserを使うには、migrationsのinit(0001)時点でカスタムUserを使うことを含めなければならない。
特に他のmodelからUserを参照している場合などには、途中から参照を変える事ができない。
すでにmigrateしている場合は、DBを初期化してmakemigrationsし直すのが楽。

常にカスタムUserを使用すべき

プロジェクトの開始時にはデフォルトUserで問題なかった場合でも、プロジェクトの途中からUserに新しい情報を追加したくなる場合もある。
であれば最初からカスタムUserを使用しておけばいいという話。
タイトルでも、常にカスタムUserを使用すべきと書いてあるが、ここで言うカスタムUserとは何もカスタムしていないカスタムUserのことである。
とりあえずいつでもカスタムできるように、カスタム用の継承をしたクラスをデフォルトで使用するように変更しておくが、実際にカスタムはしなくてもいいという話だ。

カスタムしていないカスタムUserの作成方法

myapp/models.py
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

AbstractUserを継承することによって、デフォルトUserに要素を追加することができる

myapp/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)

自作UserをAdminに設定

myproject/settings.py
AUTH_USER_MODEL = 'myapp.User'

自作Userを認証用のUserモデルとして設定


もっと全体的な事が知りたければ、公式Djangoドキュメントを読むと良い。