ホームページ >バックエンド開発 >Python チュートリアル >Django AllAuth 章 カスタム フィールドを使用した Django AllAuth ユーザー モデルの拡張

Django AllAuth 章 カスタム フィールドを使用した Django AllAuth ユーザー モデルの拡張

王林
王林オリジナル
2024-08-13 14:32:38577ブラウズ

注: この記事は当初、私のサブスタック (https://andresalvareziglesias.substack.com/

) に投稿されました。

これは、この Django AllAuth 一連の投稿の最後の章です。これら 5 つの章で、すべての認証ニーズを処理するための非常に役立つ Django コンポーネントという、ちょっとした不思議な要素を発見しました。この章では、基本的な Django ユーザー モデルを拡張してカスタム フィールドを追加する方法を学びます。

章のリスト

  • 第 1 章 - Django の認証のためのオールインワン ソリューション
  • 第 2 章 - Django AllAuth をインストールして構成する方法
  • 第 3 章 - Django AllAuth を使用したソーシャル ログイン
  • 第 4 章 - Django AllAuth UI のカスタマイズ
  • 第 5 章 - カスタム フィールドを使用した Django AllAuth ユーザー モデルの拡張 ←これ!

Django AllAuth Chapter  Extending Django AllAuth user model with custom fields

Django ユーザーモデル

AllAuth は、標準の Django ユーザー モデルに加えて、ソーシャル ログインとログイン トークンを処理するための追加のテーブルを使用します。 Django 5 では、ユーザー モデルは django.contrib.auth パッケージにあり、公式ドキュメントにあるように、事前定義されたフィールドが多数あります。

  • https://docs.djangoproject.com/en/5.0/ref/contrib/auth/

これだけではプロジェクトには不十分な場合があります。 Django を使用すると、カスタムのユーザー テーブルとユーザー マネージャーを作成して、あらゆるプロジェクトのニーズに対応できます。

ログインおよび登録プロセスを処理するために、カスタム User テーブルとカスタム UserManager を作成します。

カスタム ユーザー テーブルの作成

サンプル プロジェクトで models.py を開き、次のようなコードを記述します:

class MyCustomUser(AbstractBaseUser):
   email = models.EmailField(unique=True)
   first_name = models.CharField(max_length=30, blank=True)
   last_name = models.CharField(max_length=30, blank=True)
   is_active = models.BooleanField(default=True)
   is_admin = models.BooleanField(default=False)
   timezone = models.CharField(max_length=30, default='UTC')
   is_custom = models.BooleanField(default=False)
   is_staff = models.BooleanField(default=False)
   created_at = models.DateTimeField(auto_now_add=True)
   updated_at = models.DateTimeField(auto_now=True)

   objects = MyCustomUserManager()
   USERNAME_FIELD = 'email'
   EMAIL_FIELD = 'email'

   def __str__(self):
       return self.email
   def has_perm(self, perm, obj=None):
       return True
   def has_module_perms(self, app_label):
       return True

   @property
   def is_utc(self):
       return self.timezone == 'UTC'

Django の AbstractBaseUser モデルを拡張して新しい User モデルを定義できます。この新しいモデルでは、必要なすべてのフィールドまたはカスタム プロパティを追加できます。

これらの行は重要です:

   objects = MyCustomUserManager()
   USERNAME_FIELD = 'email'
   EMAIL_FIELD = 'email'

これらの行で、ユーザー モデルをカスタム UserManager にリンクし、一意の「ユーザー名」として機能するフィールドも定義しています。

Django 管理ツールから管理するには、必ず新しいモデルを admin.py に登録してください。

from django.contrib import admin
from .models import MyCustomUser

admin.site.register(MyCustomUser)

カスタム ユーザー マネージャーの作成

サンプル プロジェクトで models.py を再度開き (または、必要に応じてカスタム UserManager 用に別のファイルを生成し)、次のようなコードを記述します。

class MyCustomUserManager(BaseUserManager):

   def create_user(self, email, password=None):
       if not email:
           raise ValueError('Users must have an email address')

       user = self.model(
           email=self.normalize_email(email),
       )

       user.set_password(password)

       user.save(using=self._db)
       return user

   def create_superuser(self, email, password):
       user = self.create_user(
           email=email,
           password=password,
       )

       user.is_admin = True
       user.is_staff = True

       user.save(using=self._db)
       return user

この例では、BaseUserManager を拡張してカスタム UserManager を作成しています。新しいユーザーが作成され、期待どおりにカスタム フィールドが入力されます。

カスタム User モデルの UserManager の前に定義したため、Django は新しいユーザーの作成時にどのクラスを使用するかを認識します。

カスタム ユーザー マネージャーとモデルの使用

プロジェクトの設定ファイルでは、次のようにしてプロジェクトの現在のユーザー モデルを設定できます。

# Set custom user model as the active one
AUTH_USER_MODEL = 'demo.MyCustomUser'

# Configure AllAuth username related management, because we are 
# using the e-mail as username. See:
# https://docs.allauth.org/en/latest/account/advanced.html
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None

この小さな変更 (および通常どおり必要な DB 移行) だけで、AllAuth サインアップ ビューを使用してユーザーの作成を開始し、光沢のあるカスタム UserManager とそのモデルの動作を確認できます。素早く簡単です。

この例では電子メールをユーザー名として使用しているため、AllAuth ユーザー名関連の管理も無効にします。

それで終わり…なのか?

この AllAuth シリーズの最終章に到達しました。 AllAuth は、アプリで認証を処理するための素晴らしいライブラリであり、事前定義された統合の膨大なリストのおかげで、ソーシャル ログインの操作が特に簡単になります。

これはシリーズの最終章ですが、今後の投稿で AllAuth について再度取り上げます。読んでいただきありがとうございます。コーディングを楽しんでください!

リストについて

Python と Docker の投稿のうち、次のような他の関連トピック (常にテクノロジーとプログラミングのトピックであることを約束します...厳禁) についても書きます。

  • ソフトウェア アーキテクチャ
  • プログラミング環境
  • Linux オペレーティング システム
  • など

何か興味深いテクノロジー、プログラミング言語などを見つけたら、ぜひ知らせてください。私はいつでも新しいことを学ぶことにオープンです!

著者について

私はアンドレスです。パルマに拠点を置くフルスタック ソフトウェア開発者で、コーディング スキルを向上させるために個人的な旅を続けています。私は自費出版のファンタジー作家でもあり、自分の名前で 4 冊の小説を出版しています。何でもお気軽に聞いてください!

以上がDjango AllAuth 章 カスタム フィールドを使用した Django AllAuth ユーザー モデルの拡張の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。