"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فصل Django AllAuth توسيع نموذج مستخدم Django AllAuth مع الحقول المخصصة

فصل Django AllAuth توسيع نموذج مستخدم Django AllAuth مع الحقول المخصصة

تم النشر بتاريخ 2024-08-25
تصفح:682

ملاحظة: تم نشر هذه المقالة في البداية على Substack الخاص بي، على https://andresalvareziglesias.substack.com/

هذا هو الفصل الأخير من سلسلة منشورات Django AllAuth. في هذه الفصول الخمسة اكتشفنا قطعة صغيرة من العجائب، وهو مكون Django مفيد حقًا للتعامل مع جميع احتياجات المصادقة لدينا. سنتعلم في هذا الفصل كيفية توسيع نموذج مستخدم Django الأساسي لإضافة حقول مخصصة.

قائمة الفصول

  • الفصل الأول - الحل الشامل للمصادقة في جانغو
  • الفصل الثاني - كيفية تثبيت وتكوين Django AllAuth
  • الفصل 3 - تسجيل الدخول الاجتماعي باستخدام Django AllAuth
  • الفصل الرابع - تخصيص واجهة مستخدم Django AllAuth
  • الفصل الخامس - توسيع نموذج مستخدم Django AllAuth مع الحقول المخصصة ←هذا!

Django AllAuth Chapter  Extending Django AllAuth user model with custom fields

نموذج مستخدم جانغو

يستخدم AllAuth نموذج مستخدم Django القياسي، بالإضافة إلى بعض الجداول الإضافية للتعامل مع تسجيل الدخول الاجتماعي ورموز تسجيل الدخول المميزة. في Django 5، يوجد نموذج المستخدم في الحزمة django.contrib.auth، ويحتوي على مجموعة من الحقول المحددة مسبقًا، كما يمكنك قراءتها في المستند الرسمي:

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

في بعض الأحيان، هذا لا يكفي لمشروعنا. يتيح لك Django إنشاء جداول مستخدم مخصصة ومديري مستخدمين للتعامل مع احتياجات كل مشروع.

سنقوم بإنشاء جدول مستخدم مخصص وإدارة مستخدم مخصصة للتعامل مع عمليات تسجيل الدخول والتسجيل.

إنشاء جدول مستخدم مخصص

افتح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'

يمكننا تحديد نموذج مستخدم جديد يمتد من نموذج AbstractBaseUser الخاص بـ Django. في هذا النموذج الجديد يمكننا إضافة كافة الحقول أو الخصائص المخصصة التي نحتاجها.

هذه السطور مهمة:

كائنات
   objects = MyCustomUserManager()
   USERNAME_FIELD = 'email'
   EMAIL_FIELD = 'email'

بهذه السطور، نقوم بربط نموذج المستخدم مع UserManager المخصص لدينا، كما نقوم أيضًا بتعريف الحقل الذي يعمل بمثابة "اسم مستخدم" فريد.

تذكر تسجيل النموذج الجديد في admin.py لإدارته من أداة إدارة Django.

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 المخصص لدينا. فهو يقوم بإنشاء مستخدمين جدد لدينا، ويملأ الحقول المخصصة كما نتوقع.

لقد حددنا قبل 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

مع هذا التغيير البسيط فقط (وترحيل قاعدة البيانات المطلوبة، كالعادة)، يمكننا البدء في إنشاء مستخدمين باستخدام طرق عرض تسجيل AllAuth لرؤية برنامج UserManager المخصص اللامع ونموذجه قيد التنفيذ. سريعة وسهلة.

نقوم أيضًا بتعطيل الإدارة المتعلقة باسم مستخدم AllAuth، لأننا نستخدم البريد الإلكتروني كاسم مستخدم في هذا المثال.

وهذه هي النهاية... أم لا؟

لقد وصلنا إلى الفصل الأخير من سلسلة AllAuth. AllAuth هي مكتبة رائعة للتعامل مع المصادقة في تطبيقاتنا، وتجعل من السهل بشكل خاص التعامل مع عمليات تسجيل الدخول عبر وسائل التواصل الاجتماعي، وذلك بفضل قائمتها الكبيرة من عمليات التكامل المحددة مسبقًا.

هذا هو الفصل الأخير من السلسلة، ولكنني سأعود إلى AllAuth في المشاركات المستقبلية. شكرًا على القراءة والبرمجة السعيدة!

حول القائمة

من بين منشورات Python وDocker، سأكتب أيضًا عن موضوعات أخرى ذات صلة (دائمًا موضوعات التكنولوجيا والبرمجة، أعدك... بكل سهولة)، مثل:

  • هندسة البرمجيات
  • بيئات البرمجة
  • نظام التشغيل لينكس
  • إلخ.

إذا وجدت بعض التقنيات أو لغات البرمجة المثيرة للاهتمام أو أي شيء آخر، فيرجى إبلاغي بذلك! أنا منفتح دائمًا لتعلم شيء جديد!

عن المؤلف

أنا أندريس، مطور برامج متكامل مقره في بالما، في رحلة شخصية لتحسين مهاراتي في البرمجة. أنا أيضًا كاتب خيالي منشور ذاتيًا، ولدي أربع روايات منشورة باسمي. لا تتردد في سؤالي عن أي شيء!

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/doctorserone/django-alauth-chapter-5-extending-django-alauth-user-model-with-custom-fields-55ia؟1 إذا كان هناك أي انتهاك ، يرجى الاتصال [email protected] بحذف ذلك.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3