AbstractUser継承Djangoの加入者識別モジュールは、AbstractBaseUser差を持つUserテーブルを書き換えます

 

 

あなたは、ユーザーの認証書き換えdjiango慣れていない場合AbstractUserとAbstractBaseUserは、バグの束につながる、あなたは簡単にミスを犯すことができ、非常に似ています。

 

 

 

私たちは、AbstractUserは少し粘着性を置くことで、AbstractBaseUserを継承し、AbstractBaseUserはAbstractUserの父であるAbstractUserソースが知らさ参照してください。

 

 

機能的に、よりそれを完璧両方が継承され、継承、そしてAbstractUserがAbstractBaseUserに基づいていないので、私たちは、何を推測することができますか?AbstractBaseUserはそれより開いていないのですか?

公式文書を通して、私たちは答えを得ることができます。

AbstractUser

         ドキュメントは完全にこれを説明しています。AbstractUserは、完全なユーザー・モデルであり、あなたはそれを継承して独自のプロファイルフィールドやメソッドを追加できるように抽象クラスなどの分野で完了します。AbstractBaseUserは唯一の認証機能、ない実際のフィールドが含まれています。あなたがサブクラス化するときにそれらを供給する必要があります。

文書は完全にこれを説明します。AbstractUserは、あなたがそれを継承して独自のプロファイルフィールドやメソッドを追加できるように、完全なユーザーモデルは、抽象クラスとしてのフィールドが含まれています。AbstractBaseUserは、認証だけが含まれていますが、実際のフィールドが含まれていません:あなたはサブクラスを継承する場合は、あなたがそれらを提供しなければなりません。

         AbstractUserは基本的に、あなたはおそらくすでに慣れているだけで、「ユーザー」クラスです。AbstractBaseUserが少ないことを想定して、あなたがユーザ名を何を表すかのフィールドにそれを伝える必要があり、どのような分野要求され、そしてどのようにそれらのユーザーを管理します。

AbstractUserは、基本的には「ユーザー」カテゴリに慣れている可能性があります。AbstractBaseUserはあまり継承、あなたはどのようにこれらのユーザーを管理するフィールドが必要なユーザー名フィールドを表し、それとを伝える必要があります。

AbstractBaseUser           

            あなただけの既存のユーザー(余分なフィールドを持つすなわちプロファイルデータ)に物事を追加している場合、それは単純で簡単ですので、その後、AbstractUserを使用しています。あなたは認証についてDjangoの仮定のいくつかを再考したい場合は、AbstractBaseUserはあなたにそうする力を与えます。

あなただけの既存のユーザー(追加のフィールドを持つすなわちプロファイルデータ)に何かを追加した場合、それは単純で簡単なので、使用AbstractUserです。あなたがDjangoの認証に関する仮定を再考したい場合は、AbstractBaseUserはあなたのための電力を提供します。

それは何を意味するのでしょうか?それは言うことです、ああ、私たちが継承に慣れているAbstractUserの クラス高度に統合され、あなたのフィールド定義の束を与えている、あなたは男を定義する必要はありません。

上記は、我々がここで、余分な追加する必要があります(だけでなく、自分自身を追加したとおりに、フィールドの右側の部分を示していない)ない追加Djangoの助けを借りているものです

 

 

 

しかし、ルックバックと、多くの場合、貧困層への高集積スケーラビリティと互換性のあるもの、だと思う、私はちょうど他の人があり、基本的なユーザー名とパスワード、ユーザータイプなど、3つのまたは4つのフィールドを必要とすることをプロジェクトになる可能性この時間の後、明らかに、気にしないAbstractUserは   無理がある、それはデータベースの効率を低下させる、データベースリソースの無駄が発生します。

私たちが継承することができますので、この時間AbstractBaseUserの   クラスには、いくつかのフィールドをカスタマイズします。私たちは見てみましょうAbstractBaseUserの   使い方

 モデル

すべてのテーブルのフィールドを作成した後、

 

 したがって、私たちはこれらの3つのフィールドがlast_login、パスワードを余分なIDを作成するための唯一のジャンゴ。

モデルクラスでは、ユーザー名フィールドを定義し、独特の属性を指定し、このフィールドには、ユーザー名フィールドであるジャンゴ伝える必要があります。

    ユーザ名= models.CharField(max_lengthを= 32、ユニーク=真)
    USERNAME_FIELD = 'ユーザ名'

    #これは、あなたが名前を付けることができ、ユーザ名の中で、ユニークは真として指定する必要があります

あなたはこれらの2つの文を書いていない場合、あなたは決してから出て作成されたデータベースの移行コマンド実行テーブルを作成する方法を見つけるだろう、与えられました:

AttributeError:型オブジェクト「のUserInfoは、」いいえ属性「USERNAME_FIELD」を持っています

 

オープン何かが、多くの場合、より純粋な意味なので、使用するときにことを指摘いくつかの問題の価値があるだろうAbstractBaseUserの  時間を我々はノートに必要があります:あなたが使用している場合はAbstractBaseUserを   、ジャンゴ認証は、すべてのすべての使用ができなくなり、認定が付属していますので、使用は、そうでメソッドの判断、メモリおよび一連の着陸、自分の暗号化を記述する必要があります。 

 

 

 

あなたは、ライブラリの再構築モデルを削除したい場合は、すべてを__init__.pyの移行は、とりわけ以下のファイルを削除するには、フォルダの下に、あなたのアプリに移動し、データベース移行コマンドを実行します。

なお、ここでデータベース移行コマンド文を失いました:

最初の方法:PyCharmターミナルコマンドライン:

記事:のpython manage.py makemigrationsかのpython3 manage.py makemigrations ###ご使用の環境に応じては、Pythonを構成することができます

記事:のpython manage.py移行するかのpython3 manage.py移行

 

 

 第二の方法:PyCharmは、メニューバーの[ツールに - > manage.pyタスクを実行します...  

記事:makemigrations 
記事:移行

 

また、ユーザーテーブルをカスタマイズし、あなたはジャンゴだけUserテーブル、当社独自の定義を生成したい場合は、DjangoはAUTH_USERテーブルが来る生成しない、あなたは、コードのリガラインを設定ガイドする必要があります。

 

AUTH_USER_MODEL =「アプリケーション名。テーブル」

おすすめ

転載: www.cnblogs.com/ruan-ruan/p/12005603.html