クロ今回のテーマは「独自カスタマイズのユーザーを使用する」です。ここまではDjango標準のUserを使用してきました。標準のUserを使用すると不都合が多い場合も多いです。ユーザーのカスタマイズ方法を見ていきましょう。LogoutViewで作成したログアウト画面をカスタマイズする」まで読まれた方を対象としています。そのためサンプルソースコードが省略されている場合があります。既存ユーザーのusernameのバリデーションはUnicodeUserValidatorが使われいてます。150文字以下にしてください。実際には漢字やひらがな、カタカナ等の全角文字でもユーザー登録出来てしまいます。これはDjango1.10からpython3のみでusernameでunicodeが許容される仕様に変更されたことによるものです。150文字以下にしてください。」が正しいということになります。この問題を解決する方法は二つです。1つは説明文やエラーメッセージを変更する方針。許容するバリデーションを使用するバリデータに切り替える方針です。今回はバリデータをASCIIUsernameValidatorに変更します。ユーザーカスタマイズの2つの方法ユーザーのカスタマイズには大きく分けて二つの方法があります。1つは既存のユーザーモデルの拡張です。プロフィールモデルなどをユーザーのIDとリレーションさせた1対1関係のモデルを用意することで既存ユーザーにない情報を付与することができます。一方は独自のユーザーモデルを構築する方法です。この方法の中でもAbstructUserを継承したユーザーモデルを使用する方法と、AbstructBaseUserを継承したユーザーモデルを構築する方法があります。AbstructBaseUserを継承したモデルのほうがカスタマイズ性が高く融通がききます。今回はAbstructBaseUserを継承した独自ユーザーを作成していきます。独自ユーザーモデルを使用する場合は最初のデータベースマイグレーションの前に行う必要があります。しないとユーザーに関連する多くのモデルがDjangoの既存ユーザーモデルとリレーションした状態でデータベースが構築されてしまうからです。ここまで、学習の都合で既存Userモデルを使用してきたので、一度データベースを破棄して新規に作成しましょう。今回は独自ユーザーモデルはaccountsアプリケーション内に作成していきます。50文字以下にしてください。help_text='この項目は必須です。メールアドレスは公開されません。**kwargs)基本的にはdjango.contrib.auth.models.UserManagerとdjango.contrib.auth.models.AbstructUserのコピーです。今回はfirst_nameとlast_nameフィールドを削ったので、その部分に関しては変更を加えています。バリデータに関してはデフォルトのままUnicodeUserValidatorを使用していますが、もしpython3環境で半角英数を使用したい場合はASCIIUsernameValidatorに変更をしましょう。ヘルプメッセージは実態に即したメッセージに変更しないと整合性が失われるので変更しています。独自のユーザーモデルを作成したので各フォームもそれに従って変更します。多くのものはimportを変更するだけで問題ないですが、ユーザー作成、ユーザー情報変更用のフォームは追加が必要になります。**kwargs)少々複雑なので、不要な部分はコメントアウトしています。import部分で先程作成したUserモデルをimportしています。EmailChangeFormはこれまでのUserInfoChangeFormの代わりに使います。ここは大きな問題はないと思います。'registration/password_reset_complete.html'ビューに関しては基本的にはUserモデルのインポートとフォームを変更するだけで問題ありません。EmailChangeViewは新設しています。テンプレートの変更ユーザーからfirst_nameとlast_nameを削除したため、テンプレートにも多少修正が必要です。以下変更したテンプレートのみ表示します。独自に作成したユーザーは登録しないと管理画面で表示・修正することは出来ません。accounts/admin.pyに追記します。CustomUserAdmin)ここも基本的にはdjango.contrib.auth.admin.UserAdminを継承したクラスを作成してパラメータを上書きしただけです。formとadd_formに作成したフォームを指定することを忘れないで下さい。add_formはUserモデルを作成するためのフォームです。間違えないようにしましょう。URL設定ビューに変更を加えているのでURL設定も変更しましょう。name="change"),]基本的にはEmailChangeViewを設定するだけです。独自ユーザーを使用するためにはAUTH_USER_MODELを指定する必要があります。この値はデフォルトでは’auth.User’となっているのですが、この値を{アプリケーション名}.{ユーザーモデル名}に変更します。'accounts.User'データベースマイグレーションでは、新規作成したデータベースにマイグレーションを行いましょう。以下コマンドを入力してマイグレーションを行います。migrate動作確認では動作確認をしていきましょう。今回はほとんど、Django既存ユーザーのコピーを追加した感じでしたが、このユーザーをベースにより自分好みのモデルにカスタマイズしていくことが出来ます。次回はログイン方式を変更していきましょう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。認証バックエンドをカスタマイズしてログイン方法を変更する検索:このブログを書いてる人クロLinuxが好きなプログラマ。スマートフォンアプリやWEB関連の開発をやっています。「クロの思考ノート」も運営してます。お仕事のご依頼は下記までお願いします。