https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model
カスタム代入 User
モデルを
Djangoは、設定値がカスタマイズされたモデルを指すように設けられている、デフォルトのユーザーモードをオーバーライドすることができ
= AUTH_USER_MODEL「users.User」 #usersアプリ名がある #USERユーザーモデル
プロジェクトを開始するときに、カスタム・ユーザー・モデルを使用して
新しいプロジェクトを開始する場合は、カスタム・ユーザー・モデルは、勧告のより価値がある設定、デフォルトのユーザーモデルが需要を満たすために持っている場合でも、モデルとデフォルトのユーザーモデルは同じですが、あなたが必要なときに行うことができますそれをカスタマイズすることができます。
django.contrib.auth.modelsからAbstractUserのインポート :クラスのユーザー(AbstractUser) のパスを
作成または実行する任意の移行をすることを忘れないでください、それにAUTH_USER_MODELポイントを聞かせすることを忘れないでくださいmigrate
前にこのことを行います。
また、このモデルはadmin.pyでアプリに登録します
django.contribインポート管理者から django.contrib.auth.adminインポートUSERADMINから .modelsインポートユーザーから admin.site.register(ユーザー、USERADMIN)
カスタム・ユーザー・モデルを指定します
モデルには、ユーザーに関連するすべての情報は、複雑なクエリのために、関連するモデルを避けるために。
デフォルトの認証バックエンドを使用する場合は、あなたのモデルは、ユーザ名、または電子メールアドレス、またはその他の一意のキーをすることができ、識別のための一意のフィールドを持っている必要があります。
最も簡単な方法は、互換性のあるカスタムユーザーモデルを構築しますAbstractBaseUser
。AbstractBaseUser
継承され、ユーザモデルの実現の中核を提供します。パスワードハッシュとのパスワードリセットトークンを含みます。
詳細に関するいくつかの実装:
myUserクラス(AbstractBaseUser): 識別子= models.CharField(= 40 MAX_LENGTH、UNIQUE = TRUE) ... フィールド名のUSERNAME_FIELD = '識別子' #記述文字列は、ユーザモデルの一意の識別子として使用されています。これは通常、ユーザー名のいくつかの並べ替えですが、また、電子メールアドレスまたはその他の一意の識別子することができます。
myUserクラス(AbstractBaseUser): ... DATE_OF_BIRTH = models.DateField() 高さ= models.FloatField() ... required_fields = [ 'DATE_OF_BIRTH'、 '高さ']#のcreatesuperuser管理コマンドプロンプトを通じてユーザー名フィールドを作成するときリスト。システムは、各フィールドの値を提供するようユーザーに促します。
アクティブです
ユーザーが考慮されているかどうかを示すBooleanプロパティ「アクティブ」。この属性AbstractBaseUser
のデフォルトプロパティを提供しますTrue
。
次のプロパティと、次のいずれかの方法に使用することができますAbstractBaseUser的子类
。
set_password
(raw_password)
パスワードハッシュのために元のパスワードを保存
カスタム・ユーザー・モデルのマネージャーを書きます
また、あなたのユーザー定義のカスタムマネージャのためのモデルなければなりません。ユーザーモデルのみを定義している場合はusername
、email
、is_staff
、is_active
、is_superuser
、 last_login
およびdate_joined
フィールド、Djangoのデフォルト、あなただけのDjangoをインストールすることができますよう、 ユーザーモデルが異なるフィールドを定義する場合は、カスタムマネージャを定義する必要がありますそして、拡大 他の二つの方法の提供を:UserManager
BaseUserManager
create_user()的原型
[ユーザー名]フィールドに加え、パラメータとして必要なすべてのフィールドを受け入れる必要があります。たとえば、ユーザーモデルが使用された場合email作为用户名字段
、およびdate_of_birth作为
必要なフィールドが、create_user
それは次のように定義する必要があります。
def create_user(self, email, date_of_birth, password=None): # create user here ...