• 商品一覧
  • お問合せ
  • ブログ記事
お仕事の依頼
好かれるマーケティング研究室のデフォルトサムネイル画像

Djangoでカスタマイズしたユーザーモデルを使う

2021-04-05
Djangoではデフォルトで使えるユーザーのモデルがあるのですが、そのユーザーモデルをそのまま使うのはあまり良くないとされています。
そのデフォルトのユーザーモデルには、メールアドレスや名前など、汎用的に使えるようなフィールドがあります。ただ、そのまま使ってしまうと、後で情報を追加したくなったり、削除したくなったときに、変更することが難しくなります。
制作するWebアプリケーションによって、ユーザーに必要なフィールドは変わってきます。現時点では、変える必要性がなかったとしても、後で変えないといけなくなったときに、大変になる可能性があるので、最初に変えておきましょう。
まずは新しく使うユーザーモデルを作成するために、usersアプリケーションを作成します。
python manage.py startapp users
アプリケーションを作成したら、models.pyでモデルを作成していきます。
新しいUserモデルを作成していきますが、その時に、AbstractUserを継承して新しいユーザーモデルを作成します。
# users/models.py

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
  id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
これだけで、後で拡張が容易にできるユーザーが作成できました。ここでは、idを単純な数字からUUIDに変更しています。
デフォルトではidは1、2、3と順番に作られていくのですが、UUIDにするとランダムで32桁の文字列を作成してくれます。
# UUIDの例
e4a03ef6-b310-4bc6-af8e-33cfa954f7bf
例えば、ユーザーのアドレスにidを使っている時に、他の人からアドレスが予測されにくくなります。もちろん、権限がない人にはアクセスできないように対策はしておきますが、万が一ということもあります。
こんな感じで必要に応じてフィールドを追加していけば、ユーザーモデルで新しい情報を扱えるようになります。

Djangoでカスタマイズしたユーザーを利用する

Djangoはデフォルトのユーザーモデルを利用しようとしますので、カスタマイズしたユーザーモデルを利用するように、指示してあげる必要があります。この設定は、migrateする前に実施するようにしてください。
# settings.py

INSTALLED_APPS = [ 
  ...中略...

  'users.apps.UsersConfig',
]

AUTH_USER_MODEL = 'users.User'
usersはアプリケーション名で、Userは作成したユーザーモデルのクラスの名前です。それを文字列としてAUTH_USER_MODELに渡しています。
また、今回サンプルで作成していたSkillモデルでデフォルトのユーザーモデルを使っていたので、それもカスタマイズしたユーザーに置き換える必要があります。
# skills/models.py
from django.contrib.auth.models import User
上記の部分を下に変更します。
# skills/models.py
from users.models import User
これであとは、makemigrationsとmigrateを実行すれば実装完了です。エラーが出る場合は、簡易的な対応としては、データベース(db.sqlite3)を一旦削除したり、migrationsフォルダにある0001_initial.pyなどを消したりして履歴を削除したりすれば実行できるようになります。(データは消えますが)
こんな感じで面倒なことをしないといけないので、最初にカスタマイズしたユーザーモデルに変えておきたいわけですね。

ユーザーモデルをもっと自由にカスタマイズしたい場合

ただし、この実装では、デフォルトのユーザーモデルに情報を足すことはできますが、情報を減らすことはできません。
そんな時は、もっと自由に実装できるAbstractBaseUserを継承しましょう。ただし、最初に設定しなければならない項目が多くなるので、慣れていないうちはAbstractUserで充分でしょう。
実装しなければならない項目が結構多くなるので、詳しくは公式の実装例をみてみてください。
django - 完全な具体例
正直、ちょっと面倒なので、こだわりがないのであれば、AbstractUserを使ってしまえばいいと思います。

サンプルサイト

repl.itにここまでに作成した内容を残しておきます。真ん中の再生ボタンを押すと、今回作成した部分を確認できます。また、左側にあるCodeタブを選択すると、ファイル構成やファイルの内容を確認できます。

無料メルマガ

今すぐもっと好かれる!

プロフィール

西松 大輝:マーケティング・サイエンティスト

数字から愛へ
・「何を変えるか?」を行動経済学・TOCLSSで分析する。
・「何を伝えるか?」を戦略・マーケティングで明確にする。
・「何を測定するか?」を機械学習・ITで支援する。

"全部"やらなくっちゃあならないってのが 「マーケティング・サイエンティスト」のつらいところだな。
覚悟はいいか?僕はできてる
  • お仕事の依頼
  • お問合せ
  • プライパシーポリシー
  • 特定商取引法に基づく表記
2019-2022, 好かれるマーケティング研究室©