ملاحظة: تم نشر هذه المقالة في البداية على Substack الخاص بي، على https://andresalvareziglesias.substack.com/
هذا هو الفصل الأخير من سلسلة منشورات Django AllAuth. في هذه الفصول الخمسة اكتشفنا قطعة صغيرة من العجائب، وهو مكون Django مفيد حقًا للتعامل مع جميع احتياجات المصادقة لدينا. سنتعلم في هذا الفصل كيفية توسيع نموذج مستخدم Django الأساسي لإضافة حقول مخصصة.
يستخدم AllAuth نموذج مستخدم Django القياسي، بالإضافة إلى بعض الجداول الإضافية للتعامل مع تسجيل الدخول الاجتماعي ورموز تسجيل الدخول المميزة. في Django 5، يوجد نموذج المستخدم في الحزمة django.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، سأكتب أيضًا عن موضوعات أخرى ذات صلة (دائمًا موضوعات التكنولوجيا والبرمجة، أعدك... بكل سهولة)، مثل:
إذا وجدت بعض التقنيات أو لغات البرمجة المثيرة للاهتمام أو أي شيء آخر، فيرجى إبلاغي بذلك! أنا منفتح دائمًا لتعلم شيء جديد!
أنا أندريس، مطور برامج متكامل مقره في بالما، في رحلة شخصية لتحسين مهاراتي في البرمجة. أنا أيضًا كاتب خيالي منشور ذاتيًا، ولدي أربع روايات منشورة باسمي. لا تتردد في سؤالي عن أي شيء!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3