Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

カスタマイズ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ドキュメントを読むと良い。

NAKKA-K
趣味はリファクタリング。 Laravel, React, Scrum, 筋トレを良くするWebエンジニア。
https://nakka-k.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away