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

سرفصلهای مطلب
هنگامی که من با Django کار می کنم ، یکی از اولین کارهایی که من اغلب باید انجام دهم این است که با کاربران کار کنم-مانند دریافت کاربر وارد شده ، ایجاد یک نسخه جدید یا گسترش مدل پیش فرض کاربر برای اضافه کردن اطلاعات بیشتر.
اکنون ، Django داخلی دارد User
مدل ، اما گاهی اوقات ممکن است یک سفارشی بخواهید. این جایی است که اگر تازه شروع کنید ، همه چیز می تواند کمی گیج کننده باشد.
خبر خوب؟ هنگامی که می فهمید چگونه Django تنظیم شده است ، دریافت مدل کاربر در Django بسیار ساده است.
امروز ، من شما را دقیقاً چگونه می توانم مدل کاربر را در Django بدست آورم ، توضیح دهم که چرا اهمیت دارد ، کد واقعی را که می توانید استفاده کنید به شما نشان می دهد و به چند سؤال رایج که معمولاً در مورد این موضوع وجود دارد پاسخ می دهم.
بیایید درست به داخل آن پرش کنیم.
فهرست مطالب
-
چرا دریافت مدل کاربر به درستی اهمیت دارد
-
چگونه می توان مدل کاربر را در Django دریافت کرد
-
مثال کامل: با استفاده از مدل کاربر
-
چه زمانی از تنظیمات استفاده کنید. auth_user_model
-
خلاصه سریع
-
اشتباهات رایج برای جلوگیری از
-
متداول
-
1. آیا می توانم به درخواست. استفاده کنم.
-
2. اگر چندین بار با get_user_model () تماس بگیرم چه اتفاقی می افتد؟
-
3. چگونه می دانم از یک مدل کاربر سفارشی استفاده می کنم؟
-
4. چه زمانی باید یک مدل کاربر سفارشی ایجاد کنم؟
-
-
منابع بیشتر
-
پایان
چرا دریافت مدل کاربر به درستی اهمیت دارد
قبل از هر چیز دیگری ، مهم است بدانید که چرا این حتی اهمیت دارد.
پروژه های جنگو به شدت بستگی دارد روی اطلاعات کاربر – نه فقط برای ورود به سیستم ، بلکه برای مجوزها ، پروفایل ها ، مدیریت مدیر و موارد دیگر.
اگر مدل کاربر را به روش اشتباهی بدست آورید ، می توانید بعداً به راحتی با مشکلات روبرو شوید ، به خصوص اگر مدل کاربر خود را سفارشی کنید.
جنگو حتی در اسناد رسمی آن در مورد این موضوع هشدار می دهد. اگر از روش صحیح برای دسترسی به مدل کاربر استفاده نمی کنید ، پروژه شما می تواند هنگام تغییر یا گسترش آن شکسته شود.
به همین دلیل بسیار مهم است که همیشه مدل کاربر را بدست آورید توصیه شده راه ، که بعدی به شما نشان خواهم داد.
چگونه می توان مدل کاربر را در Django دریافت کرد
خوب ، در اینجا ساده ترین راه برای به دست آوردن مدل کاربر در Django وجود دارد:
from django.contrib.auth import get_user_model
User = get_user_model()
اینجا چه اتفاقی می افتد؟
-
get_user_model()
یک عملکرد Django داخلی است. -
این مدل کاربر صحیح را برمی گرداند – خواه از پیش فرض استفاده کنید یا سفارشی که ایجاد کرده اید.
اگر تعجب می کنید چرا فقط نه import from django.contrib.auth.models import User
دلیل این امر این است: اگر همیشه swap مدل پیش فرض کاربر را برای یک سفارشی ، مستقیم وارد کنید ، کد شما را می شکند.
با استفاده از get_user_model()
، شما در امان و در آینده و ضد آینده پروژه خود باقی می مانند.
مثال کامل: با استفاده از مدل کاربر
بیایید به یک مثال کامل کار کنیم ، نه فقط یک قطعه کوچک.
تصور کنید که می خواهید یک کاربر جدید را در داخل نمایش Django ایجاد کنید:
from django.contrib.auth import get_user_model
from django.http import HttpResponse
def create_user_view(request):
User = get_user_model()
user = User.objects.create_user(username='newuser', password='securepassword123')
return HttpResponse(f"Created user: {user.username}")
در این مثال:
-
ابتدا مدل کاربر را با
get_user_model()
بشر -
سپس ، من از داخلی Django استفاده می کنم
create_user
روش برای ایجاد ایمن کاربر. -
سرانجام ، من یک پاسخ ساده HTTP را که نام کاربری ایجاد شده را نشان می دهد ، ارسال می کنم.
توجه کنید که چقدر تمیز و انعطاف پذیر است – مهم نیست که از چه مدل کاربر در زیر کاپوت استفاده می کنید.
چه زمانی استفاده کنید settings.AUTH_USER_MODEL
چیز دیگری که اغلب در پروژه های جنگو مشاهده خواهید کرد چیزی شبیه به این است:
from django.conf import settings
settings.AUTH_USER_MODEL
این بدست آوردن مدل کاربر در عوض ، به شما می دهد رشته مسیر به مدل کاربر ، مانند "auth.User"
(برای پیش فرض) یا "myapp.MyCustomUser"
اگر آن را سفارشی کردید.
شما معمولاً استفاده می کنید settings.AUTH_USER_MODEL
درون شما مدل ها.py هنگامی که می خواهید در یک مدل خارجی ، Onetoonefield یا ManyTomanyfield به مدل کاربر پیوند دهید.
به عنوان مثال:
from django.conf import settings
from django.db import models
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
bio = models.TextField()
در اینجا ، Profile
مدل با مدل صحیح کاربر گره خورده است. باز هم ، این پروژه شما را انعطاف پذیر و ضد آینده نگه می دارد.
خلاصه سریع
وضعیت | از چه چیزی استفاده کنیم |
دریافت مدل کاربر واقعی در کد پایتون (نمایش ها ، فرم ها ، مدیر و غیره روی) | get_user_model() |
مراجعه به مدل کاربر در روابط بانک اطلاعات روی) | settings.AUTH_USER_MODEL |
این جدول را به یاد داشته باشید – بعداً سردردهای زیادی را ذخیره می کند!
اشتباهات رایج برای جلوگیری از
-
واردات مستقیم
User
: هرگز فقط انجام ندهیدfrom django.contrib.auth.models import User
مگر اینکه 100 ٪ مطمئن باشید که برای همیشه به مدل پیش فرض چسبیده اید (توصیه نمی شود). -
روابط سخت کد کننده: اگر چیزی شبیه به آن بنویسید
ForeignKey('auth.User')
به جای استفادهsettings.AUTH_USER_MODEL
اگر به یک مدل کاربر سفارشی تغییر دهید ، شکسته می شود. -
ایجاد مدل های کاربر سفارشی زود هنگام: اگر فکر می کنید ممکن است همیشه به یک مدل کاربر سفارشی (مانند اضافه کردن شماره تلفن ، فیلدهای پروفایل اضافی) نیاز داشته باشید ، آن را زود تنظیم کنید. سوئیچینگ بعد از داشتن پایگاه داده پر از کاربران ، دردناک است.
متداول
1. آیا می توانم دسترسی پیدا کنم request.user
مستقیم؟
بله نمای داخلی ، request.user
شیء کاربر ورود به سیستم فعلی را به شما می دهد. در پشت صحنه ، Django از مدل صحیح کاربر استفاده می کند ، خواه سفارشی باشد و چه به طور پیش فرض.
2. اگر تماس بگیرم چه اتفاقی می افتد get_user_model()
چندین بار؟
اصلاً مشکلی نیست Django آن را داخلی ذخیره می کند ، بنابراین کارآمد است. در صورت نیاز به آن با آن تماس بگیرید.
3. چگونه می دانم از یک مدل کاربر سفارشی استفاده می کنم؟
پرونده تنظیمات Django خود را بررسی کنید (settings.py
) و به دنبال AUTH_USER_MODEL
بشر اگر تنظیم شده باشد (مانند 'myapp.MyCustomUser'
، شما از یک مدل سفارشی استفاده می کنید. اگر آنجا نباشد ، جنگو از پیش فرض استفاده می کند.
4. چه زمانی باید یک مدل کاربر سفارشی ایجاد کنم؟
اگر شما حتی فکر کردن به زمینه هایی مانند شماره تلفن ، تاریخ تولد ، تصاویر پروفایل و غیره احتیاج دارید روی، بهتر است یک مدل سفارشی را زود تنظیم کنید.
در اینجا یک راهنمای عالی از اسناد رسمی جنگو آورده شده است روی سفارشی کردن مدل های کاربر.
پایان
کار با کاربران در Django نیازی به مشکل نیست. هنگامی که می دانید استفاده کنید get_user_model()
وقتی به مدل احتیاج دارید و settings.AUTH_USER_MODEL
برای روابط پایگاه داده ، کد شما تمیز ، ایمن و آماده برای هرگونه تغییر است.
اکنون که می دانید چگونه مدل کاربر را در Django بدست آورید ، چه چیزی دوست دارید در مورد کاربران خود در پروژه خود سفارشی کنید؟ به من پیام دهید روی X.
اگر می خواهید من به شما نشان دهم که چگونه ساخت یک مدل کاربر سفارشی از ابتدا ، به من اطلاع دهید – هنگامی که مراحل را می دانید کار سختی نیست.
منابع بیشتر
-
مستندات رسمی Django: با استفاده از یک مدل کاربر سفارشی
-
توضیح ساده روی AbstractBaseuser vs Abstractioner
-
Stackoverflow: بهترین روش ها برای مدل های کاربر Django
منتشر شده در 1404-04-30 19:56:12