नोट: यह लेख प्रारंभ में मेरे सबस्टैक पर https://andresalvareziglesias.substack.com/
पर पोस्ट किया गया था।
यह पोस्ट की इस Django AllAuth श्रृंखला का अंतिम अध्याय है। इन पांच अध्यायों में हमने आश्चर्य का एक छोटा सा टुकड़ा खोजा है, जो हमारी सभी प्रमाणीकरण आवश्यकताओं को संभालने के लिए वास्तव में उपयोगी Django घटक है। इस अध्याय में हम सीखेंगे कि कस्टम फ़ील्ड जोड़ने के लिए मूल Django उपयोगकर्ता मॉडल का विस्तार कैसे करें।
ऑलऑथ सामाजिक लॉगिन और लॉगिन टोकन को संभालने के लिए मानक 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'
हम Django के AbstractBaseUser मॉडल से विस्तारित एक नए उपयोगकर्ता मॉडल को परिभाषित कर सकते हैं। इस नए मॉडल में हम वे सभी फ़ील्ड या कस्टम गुण जोड़ सकते हैं जिनकी हमें आवश्यकता है।
ये पंक्तियाँ महत्वपूर्ण हैं:
objects = MyCustomUserManager() USERNAME_FIELD = 'email' EMAIL_FIELD = 'email'
इन पंक्तियों के साथ हम उपयोगकर्ता मॉडल को अपने कस्टम उपयोगकर्ता प्रबंधक के साथ जोड़ रहे हैं, और हम एक अद्वितीय "उपयोगकर्ता नाम" के रूप में कार्य करने वाले फ़ील्ड को भी परिभाषित कर रहे हैं।
नए मॉडल को Django एडमिन टूल से प्रबंधित करने के लिए admin.py में पंजीकृत करना याद रखें।
from django.contrib import admin from .models import MyCustomUser admin.site.register(MyCustomUser)
हमारे नमूना प्रोजेक्ट में दोबारा models.py खोलें (या यदि आप चाहें तो कस्टम यूजरमैनेजर के लिए एक और फ़ाइल जेनरेट करें) और इस तरह एक कोड लिखें:
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
इस उदाहरण में हम अपना कस्टम यूजरमैनेजर बनाने के लिए बेसयूजरमैनेजर का विस्तार कर रहे हैं। यह हमारे नए उपयोगकर्ता बनाता है, और हमारी अपेक्षा के अनुरूप कस्टम फ़ील्ड भरता है।
हमने अपने कस्टम उपयोगकर्ता मॉडल के लिए 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 उपयोगकर्ता नाम संबंधित प्रबंधन को भी अक्षम कर रहे हैं, क्योंकि हम इस उदाहरण में उपयोगकर्ता नाम के रूप में ई-मेल का उपयोग कर रहे हैं।
हम इस AllAuth श्रृंखला के अंतिम अध्याय पर पहुंच गए हैं। AllAuth हमारे ऐप्स में प्रमाणीकरण को संभालने के लिए एक अद्भुत लाइब्रेरी है, और इसकी पूर्वनिर्धारित एकीकरणों की बड़ी सूची के कारण, सामाजिक लॉगिन के साथ काम करना विशेष रूप से आसान हो जाता है।
यह श्रृंखला का अंतिम अध्याय है, लेकिन मैं भविष्य की पोस्टों में AllAuth पर दोबारा गौर करूंगा। पढ़ने और खुश कोडिंग के लिए धन्यवाद!
पायथन और डॉकर पोस्ट के अलावा, मैं अन्य संबंधित विषयों (हमेशा तकनीकी और प्रोग्रामिंग विषय, मैं वादा करता हूं... उंगलियों को पार करके) के बारे में भी लिखूंगा, जैसे:
यदि आपको कोई दिलचस्प तकनीक, प्रोग्रामिंग भाषा या कुछ और मिले, तो कृपया मुझे बताएं! मैं हमेशा कुछ नया सीखने के लिए तैयार रहता हूँ!
मैं एन्ड्रेस हूं, पाल्मा में स्थित एक पूर्ण-स्टैक सॉफ़्टवेयर डेवलपर, अपने कोडिंग कौशल को बेहतर बनाने के लिए एक व्यक्तिगत यात्रा पर। मैं एक स्व-प्रकाशित फंतासी लेखक भी हूं और मेरे नाम पर चार प्रकाशित उपन्यास हैं। आप मुझसे कुछ भी पूछ सकते हैं!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3