ساخت CustomManager
با سلام خدمت تمام دوستان عزیز وب سایت کدینگ یار، در قسمت دوم سری بلاگ پست های آموزش پیاده سازی اعتبارسنجی کاربر با استفاده از شماره تلفن و ارسال OTP Code قصد داریم تا Custom Manager خودمون رو بسازیم و به مدل User سفارشی خودمون که در بلاگ پست قبلی ساختیم معرفی کنیم تا مدلUser ما به جای استفاده از منیجر پیشفرض خودش از این به بعد از منیجر سفارشی ما استفاده کنه.
خب بدون معطلی بریم که دست به کد شیم!
Manager همینطور که خود داکیومنتیشن جنگو گفته یک Interface(رابط) بین مدل های جنگو و دیتابیسه و هر مدل به صورت پیشفرض یک منیجر داره که query ها و عملیات های مربوط به دیتابیس رو مدیریت میکنه این منیجر دیفالت خود جنگو همون objects که بار ها وبارها ازش برای اعمال دستورات خودمون به دیتابیس استفاده
کردیم.
مثل همین query که به دیتابیس زدیم و اون آبجکت هایی از مدل Person رو درخواست کردیم که سنشون بیشتر یا مساوی 18 سال باشه:
Person.objects.filter(age__get=18)


خب حالا که از پایه فهمیدیم منیجر چیه بریم سراغ ساخت منیجر سفارشی خودمون.

بعد یک کلاس به اسم CustomUserManager میسازیم و در این کلاس از کلاسی که در بالا import کردیم ارث بری میکنیم.
داخل این کلاس میتونیم هر متود دلخواهی که خواستیم رو بسازیم یا از متود هایی که در کلاس BaseUserManager وجود داره استفاده کنیم یا اون هارو override کنیم.
اما در اینجا ما دوتا متود نیاز داریم تا بسازیم:
همینطور که از اسمشون پیداست متود اول یک کاربر معمولی میسازه متود دوم یک سوپرuser یا همون ادمین رو میسازه!
و اینها تنها تفاوتشون اینه که میاییم داخل create_superuser ادمین رو برابر true قرارمیدیم:
“is_admin=True".
خب بریم اولین متود رو پیاده سازی کنیم:

در این متود پارامتر های phone_number ، password و سایر فیلد های مورد نظرمون رو دریافت میکنیم و اونارو اعتبار سنجی میکنیم(شما میتونین فیلد هایی که به صورت دلخواه برای مدلتون تعریف کردین مثل ایمیل رو به همین صورت اعتبار سنجی کنین البته چون در اینجا صحبت از فیلد ایمیل شد بهتره برای اعتبار سنجی اون از متود normalize_email خود کلاس BaseUserManager استفاده کنین مثل set_password که در ادامه بهتون معرفیش میکنم.)
بعد اعتبار سنجی فیلد های مورد نظر میریم سراغ ساخت آبجکت User خودمون:
خب بریم سراغ متود بعدی یعنی create_superuser:

خب در ابتدا پارامتر های ضروری رو دریافت میکنیم + به علاوه فیلد هایی که خودتون به دلخواه در مدل اضافه کردین.
بعد قراره از داخل other_fields بیاییم سه فیلد رو که هممون باهاش آشنایی داریم و برای ساخت یک کاربر ادمین واجبه رو دریافت میکنیم و مقدارشون رو به صورت پیشفرض برای کاربر ادمین True قرار میدیم و مجددا میاییم اعتبارسنجی میکنیم که حتما این فیلد ها مقدارشون True باشه و که اگر نبود یک ارور رو raise میکنیم و به کاربر نمایش میدیم.
در نهایت با همون متود ساخت کاربر عادی میاییم یک آبجکت User میسازیم و اونو return میکنیم!
نکته
از اینجا که بعد ساخت منیجر سفارشی خودمون اونو باید به مدلمون معرفی کنیم!
یادتونه در بلاگ پست قبلی گفتم مقدار objects رو None قرار بدین تا جلسه بعد؟ درسته دقیقا باید در همون قسمت بیاییم و منیجر سفارشی خودمون رو به مدل معرفی کنیم:
()Objects = CustomUserManager
دوتا کامند همیشگی یعنی makemigrations و migrate رو ران میکنیم و آماده میشیم تا در بلاگ پست بعدی بریم سراغ CustomAuthenticationBackend خودمون :)
امیدوارم که از این بلاگ پست نهایت استفاده رو برده باشین، منم تا جایی که امکان داشت سعی کردم که خلاصه و مفید و مختصر مطالب رو در اختیارتون بذارم
فقط یادتون نره که نظرخودتون رو راجع به این بلاگ پست با ما یعنی تیم کدینگ یار به اشتراک بذارین چون همین بازخورد مثبت شماست که باعث قوت قلب ما میشه تا بتونیم هرروز مطالب جدید و کاربردی بیشتری رو باهاتون به اشتراک بگذاریم.
اگر فکر می کنید که ما چیزی را در این مقاله جا انداخته ایم و یا در مورد پست های بعدی ایده و یا نظری دارید، خوشحال می شویم که این مورد را با ما در میان بگذارید. تنها کافیست روی دکمه زیر کلیک کنید و پیشنهاد خود را ارسال کنید.