Django AbstractBaseUserでカスタムユーザー作成

2019年12月13日

AbstractBaseUserを利用してUserモデルをカスタマイズし、ご多分に漏れずemailを利用したログイン認証に変更します。

 

Userモデルのカスタマイズ(拡張)自体の説明、および管理サイトではないログイン・ログアウト機能(画面)の実装については下記関連ページをご覧下さい。

 

関連ページ

ログイン認証 [AbstractUser]

 

 

ログイン時の認証においてusername以外を利用したい場合は、AbstractBaseUserを継承したモデルであるカスタムユーザーを作成する必要があります。本記事ではメールアドレス(email)をユニークとするモデルを作成します。コード自体は公式サイトである「Django の認証方法のカスタマイズ」の完全な具体例を引用し、説明を加えています。

 

 

 

 

models.pyを編集しマネージャーとモデルを作成します。なお本記事ではmyappという名前のアプリケーションにおいて実装していきます。

 

myapp/models.py

7〜37行目

AbstractBaseUserを利用してカスタムユーザーを作成する場合、BaseUserManagerを継承したカスタムマネージャーを実装する必要があります。create_userは通常のユーザーを作成する場合に、create_superuserは「python manage.py createsuperuser」コマンドで管理者ユーザーを作成する場合などに利用されます。

 

40〜72行目

AbstractBaseUserを継承しMyUserクラスとしてのモデルを作成しています。AbstractUserと違いフィールドを全て記述する必要があります。モデルにはユニークなフィールドを指定する必要があり、52行目のUSERNAME_FIELDにて本記事の目的であるメールアドレスを設定しています。もし既に登録されたユーザーと同じメールアドレスを登録しようとするとバリデーションによってエラーとなります。

 

 

 

次にadmin.pyを編集し、管理サイト内(http://localhost:8000/admin/)でカスタムユーザーを登録・編集できるようにします。

 

myapp/admin.py

ModelFormを継承したUserCreationForm(10行目〜)およびUserChangeForm(38行目〜)を作成し、管理サイトにおいてユーザーの新規作成および編集フォームを構築しています。

 

モデルからフォーム画面を作成 [ModelForm]

 

 

 

setting.pyに下記項目を追記します。MyUserはカスタマイズしたモデルの名前です。

 

マイグレーションファイルの作成と実行。

 

スーパーユーザー(管理ユーザー)を作成します。カスタマイズされていることが確認できます。

 

 

 

参照ページ


 

django ドキュメント

Django の認証方法のカスタマイズ

完全な具体例

 

django.contrib.auth

 

django.contrib.auth

マネージャメソッド

 

 

 

LINEで送る
Pocket

おすすめ本
定期本
 
Copyright © 2020 思考の葉 All Rights Reserved.  プライバシーポリシー