از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش گسترش مدل کاربر Django

سرفصلهای مطلب
اگر با Django کار می کنید و هر چیزی را که شامل حساب های کاربری باشد – مانند یک وبلاگ ، یک فروشگاه یا یک سایت عضویت – می توانید به نقطهای برسید که مدل کاربر پیش فرض فقط کافی نیست.
شاید بخواهید یک عکس پروفایل ، شماره تلفن یا مجوزهای اضافی اضافه کنید.
نکته این است که گسترش مدل کاربر Django می تواند در ابتدا احساس گیج کننده کند. به نظر می رسد فنی است ، و اینترنت پر از توصیه هایی است که یا جزئیات مهم را رد می کند یا خیلی پیچیده می شود.
من هم آنجا بوده ام
بنابراین ، در این راهنما ، من می خواهم شما را از طریق چگونگی گسترش صحیح مدل کاربر Django ، گام به گام ، بدون اضافه کردن استرس غیر ضروری به پروژه خود ، پیاده کنم.
من به شما نشان خواهم داد که از کدام روش استفاده کنید ، چه زمانی از آن استفاده کنید ، و چگونه می توانید از اشتباهات رایج که بعداً می تواند باعث ایجاد مشکلات شود ، جلوگیری کنید.
بیایید همه آن را خراب کنیم.
مدل کاربر در جنگو چیست؟
Django ، یک چارچوب وب محبوب Python ، دارای یک مدل کاربر داخلی است که دارای تأیید اعتبار و مجوز است.
در مدل کاربر در اصل یک جدول پایگاه داده و کلاس Python مربوطه است که اطلاعات اصلی را در مورد کاربران برنامه شما مانند نام های کاربری ، رمزهای عبور ، آدرس های ایمیل و سایر جزئیات ضروری ذخیره می کند.
از آنجا که بسیاری از پروژه ها به داده ها یا رفتارهای اضافی کاربر نیاز دارند ، گسترش یا به روزرسانی مدل کاربر می تواند بسیار مفید باشد.
در بسیاری از برنامه ها ، ممکن است بخواهید زمینه های اضافی را برای گرفتن جزئیات بیشتر در مورد کاربران خود اضافه کنید. به عنوان مثال ، ممکن است شما نیاز به اضافه کردن داشته باشید:
-
یک عکس پروفایل برای نمایش نماد برای هر کاربر.
-
یک شماره تلفن برای اهداف تأیید تماس یا چند عاملی.
-
شرح زیستی یا کوتاه
-
مجوزهای اضافی یا ویژگی هایی که تحت پوشش زمینه های پیش فرض Django قرار نمی گیرند ، به شما امکان می دهد تا دسترسی یا شخصی سازی محتوا را به طور مؤثر کنترل کند.
همچنین ممکن است بخواهید کارهایی مانند تنظیمات برگزیده و نقش کاربر را انجام دهید. یا ممکن است شما از یک ایمیل به عنوان نام کاربری استفاده کنید و می خواهید رفتار ورود به سیستم را سفارشی کنید.
این تغییرات قابل توجه است زیرا آنها فراتر از قابلیت های پیش فرض مدل کاربر داخلی Django هستند. و تلاش برای فشار دادن این اطلاعات اضافی در مدل کاربر داخلی بدون انجام صحیح می تواند باعث ایجاد اشکالات یا شکسته شدن مهاجرت پایگاه داده شما شود. خوشبختانه ، جنگو چند روش تمیز برای انجام این کار به ما می دهد.
با گسترش مدل ، اطمینان حاصل می کنید که تمام قسمت های سیستم شما – فرم ها ، نمایش ها ، پشتیبان های احراز هویت و رابط های اداری – داده های اضافی مورد نیاز خود را برای مدیریت صحیح کاربران دارند.
بدون چنین سفارشی سازی ، ممکن است هنگام تلاش برای پیاده سازی ویژگی هایی که به اطلاعات اضافی مربوط به کاربر نیاز دارند ، با محدودیت هایی روبرو شوید.
پیش نیازهای
قبل از غواصی برای گسترش مدل کاربر Django ، باید داشته باشید:
-
دانش اساسی Django: آشنایی با ساختار پروژه Django ، مدل ها ، نماها و الگوهای.
-
درک پایتون: از آنجا که Django یک چارچوب پایتون است ، دانش کاری از پایتون ضروری است.
-
تجربه با مدل کاربر پیش فرض Django: دانستن چگونگی برخورد Django با تأیید اعتبار و جلسات کاربر ، پایه و اساس کاملی برای شخصی سازی مدل کاربر فراهم می کند.
-
یک محیط توسعه: اطمینان حاصل کنید که یک نصب Django در حال کار ، یک ویرایشگر کد و یک پایگاه داده مناسب تنظیم شده است (به عنوان مثال SQLite برای توسعه).
اگر در ایجاد و اجرای پروژه های Django راحت باشید ، این پیش نیازها را فرض می کنم.
با وجود این اصول ، شما آماده خواهید بود تا مدل کاربر را به طور موثری گسترش دهید ، خواه زمینه های اضافی را برای تصاویر پروفایل ، شماره تلفن یا مجوزهای اضافی اضافه کنید.
سه راه برای گسترش مدل کاربر
سه رویکرد اصلی برای گسترش مدل کاربر در Django وجود دارد:
1 ایجاد یک مدل پروفایل کاربر (رابطه یک به یک)
این ساده ترین و امن ترین گزینه است اگر پروژه شما در حال حاضر از مدل کاربر پیش فرض Django استفاده می کند و نمی خواهید آن را تغییر دهید.
شما یک مدل جدید ایجاد می کنید که با یک قسمت یک به یک به کاربر پیوند می یابد. سپس ، شما تمام اطلاعات اضافی را در این مدل پروفایل ذخیره می کنید.
مثال:
from django.contrib.auth.models import User
from django.db import models
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone_number = models.CharField(max_length=15)
profile_picture = models.ImageField(upload_to='profile_pics', null=True, blank=True)
می توانید نمایه را به طور خودکار با استفاده از سیگنال های Django متصل کنید:
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
else:
instance.userprofile.save()
این رویکرد برای پروژه هایی که از قبل زنده هستند یا جایی که می خواهید ساده نگه دارید ، بهترین است.
2 گسترش دهنده را گسترش دهید
اگر شما یک پروژه جدید را شروع کرده اید و می خواهید کنترل کامل بر روی مدل کاربر داشته باشید ، این بهترین گزینه است. شما مدل کاربر سفارشی خود را با زیر طبقه بندی ایجاد می کنید AbstractUser
بشر
این امر به شما امکان می دهد بدون تغییر رفتار احراز هویت اصلی ، زمینه های اضافی را مستقیماً به مدل کاربر اضافه کنید.
مثال:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True)
profile_picture = models.ImageField(upload_to='profile_pics', null=True, blank=True)
سپس ، در تنظیمات خود:
AUTH_USER_MODEL = 'yourapp.CustomUser'
شما باید تنظیم کنید AUTH_USER_MODEL
قبل از اجرای اولین مهاجرت. این مرحله را پرش نکنید ، یا بعداً به خطاهای مهاجرت خواهید رسید.
این رویکرد برای پروژه های جدید جایی که شما می خواهید انعطاف پذیری کامل داشته باشید بهترین است.
3 Basebaseuser را گسترش دهید
این پیشرفته ترین گزینه است. شما مدل کاربر خود را از ابتدا ایجاد می کنید ، حتی کنترل روش تأیید اعتبار را نیز کنترل می کنید. عالی است اگر به جای نام کاربری نیاز به استفاده از ایمیل دارید یا می خواهید ورود را به طور کامل سفارشی کنید processبشر
اما بگذارید صادق باشم: این نیز کار بیشتری است. شما باید مدیر خود را تنظیم کرده و مجوزها را به صورت دستی اداره کنید.
این رویکرد برای پروژه هایی با نیازهای پیچیده کاربر یا جریان ورود به سیستم سفارشی بهترین است.
از کدام روش استفاده کنید؟
اگر قبلاً یک پروژه کاری دارید و فقط باید چند زمینه اضافی اضافه کنید ، با مدل پروفایل کاربر همراه باشید.
اگر تازه شروع می کنید و می خواهید از ابتدا زمینه های سفارشی را اضافه کنید ، با AbstractUser بروید.
در صورت نیاز به کنترل کامل ، فقط از AbstractBaseuser استفاده کنید.
اشتباهات رایج برای جلوگیری از
-
متغیر
AUTH_USER_MODEL
بعد از اجرای مهاجرت (این پایگاه داده شما را می شکند) -
فراموش کردن برای تنظیم
AUTH_USER_MODEL
درsettings.py
-
به روزرسانی مدیر نیست.py هنگام استفاده از یک مدل کاربر سفارشی (بیشتر روی که در بخش بعدی)
-
ایجاد یک
CustomUserManager
هنگام استفادهAbstractBaseUser
کار کردن با مدیر Django
اگر استفاده می کنید AbstractUser
، برای تشخیص مدل کاربر سفارشی خود ، باید پنل مدیر خود را به روز کنید.
در اینجا یک مثال سریع وجود دارد:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
model = CustomUser
fieldsets = UserAdmin.fieldsets + (
(None, {'fields': ('phone_number', 'profile_picture')}),
)
admin.site.register(CustomUser, CustomUserAdmin)
به این ترتیب ، شما هنوز هم تمام ویژگی های پیش فرض Admin را دریافت خواهید کرد اما با اضافه شدن فیلدهای سفارشی خود.
متداول
آیا برای استفاده از ایمیل به عنوان نام کاربری نیاز به استفاده از baseuser دارم؟
نه همیشه می توانید استفاده کنید AbstractUser
و اگر می خواهید ورود به سیستم ایمیل را به سادگی پنهان کنید ، اما AbstractBaseUser
در صورت لزوم کنترل کامل را به شما می دهد.
آیا می توانم بعد از شروع پروژه خود به یک مدل کاربر سفارشی تغییر دهم؟
از نظر فنی ، بله ، اما بسیار خطرناک است. شما باید تمام داده های خود را به صورت دستی مهاجرت کنید ، که می تواند دردناک باشد. اگر می توانید ، از ابتدا برای آن برنامه ریزی کنید.
چه اتفاقی می افتد اگر فراموش کنم که تنظیم کنم AUTH_USER_MODEL
؟
جنگو از پیش فرض استفاده خواهد کرد User
مدل ، و تغییر بعداً می تواند باعث ایجاد مشکلات اساسی در پایگاه داده و مهاجرت شما شود. پس فراموش نکنید!
افکار نهایی
گسترش مدل کاربر Django ممکن است در ابتدا یک اتفاق بزرگ به نظر برسد ، اما هنگامی که می دانید از کدام روش استفاده می شود ، فقط به بخش دیگری از تنظیم پروژه شما تبدیل می شود.
لحظه ای قبل از پرش به فکر نیازهای پروژه خود باشید. شروع با رویکرد درست ، بعداً یک تن سردرد را برای شما نجات می دهد onبشر
بنابراین – چگونه می خواهید مدل کاربر Django خود را گسترش دهید ، و چه زمینه هایی را باید اضافه کنید؟
منابع بیشتر
-
اسناد رسمی جنگو روی مدل های کاربر سفارشی
-
با استفاده از سیگنال های Django به طور موثر
-
نکات و ترفندهای عالی جنگو روی پشته جریان
-
چگونه می توان بدون تجربه در فناوری شروع کرد
منتشر شده در 1404-04-10 21:12:11