Django তে User Model হল একটি প্রি-বিল্ট মডেল যা ইউজার সম্পর্কিত তথ্য (যেমন ইউজারের নাম, ইমেইল, পাসওয়ার্ড, ইত্যাদি) সংরক্ষণ করে। এটি Django এর অটোমেটিক ব্যবহারকারী সিস্টেমের অংশ হিসেবে কাজ করে এবং ইউজার অথেন্টিকেশন, অথোরাইজেশন ইত্যাদি পরিচালনা করতে সাহায্য করে। তবে অনেক সময় প্রজেক্টের বিশেষ প্রয়োজনের জন্য আমরা Custom User Model তৈরি করতে চাই, যাতে আমরা আমাদের প্রয়োজন অনুযায়ী অতিরিক্ত ফিল্ড যোগ করতে পারি বা পূর্বনির্ধারিত ফিল্ডগুলো পরিবর্তন করতে পারি।
Django এর Pre-built User Model
Django তে ইউজার ম্যানেজমেন্টের জন্য একটি বিল্ট-ইন User মডেল রয়েছে, যা django.contrib.auth অ্যাপের অংশ। এই মডেলটি ইমেইল, ইউজারনেম, পাসওয়ার্ড, ফার্স্ট নেম, লাস্ট নেম ইত্যাদি ফিল্ড ধারণ করে। এটি ব্যবহারকারী তৈরি, লগইন, এবং পাসওয়ার্ড হ্যান্ডলিং এর জন্য Django এর অটোমেটিক সিস্টেম ব্যবহার করতে সাহায্য করে।
from django.contrib.auth.models import User
# নতুন ইউজার তৈরি করা
user = User.objects.create_user('myusername', 'myemail@example.com', 'mypassword')
# ইউজার লগইন ইত্যাদি
Custom User Model তৈরি করা
যেহেতু Django এর প্রি-বিল্ট User মডেল কখনো কখনো আমাদের প্রয়োজন মেটাতে পারে না (যেমন অতিরিক্ত ফিল্ড যোগ করা বা ইউজার ইমেইলকে ইউনিক করে ফেলা), সেজন্য Django তে Custom User Model তৈরি করা হয়।
১. Custom User Model তৈরি করা
Custom User Model তৈরি করতে, প্রথমে AbstractBaseUser বা AbstractUser ক্লাস থেকে ইনহেরিট করা হয়। AbstractUser ব্যবহার করলে Django এর বিল্ট-ইন ইউজার ফিচারগুলি (যেমন পাসওয়ার্ড ম্যানেজমেন্ট, গ্রুপ, পারমিশন ইত্যাদি) অটোমেটিকভাবে পাওয়া যাবে।
AbstractBaseUser ব্যবহার করলে, আপনাকে সব কিছু কাস্টমাইজ করতে হবে, যেমন ইউজারনেম, পাসওয়ার্ড ইত্যাদি।
উদাহরণ: Custom User Model তৈরি করা
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
date_of_birth = models.DateField(null=True, blank=True)
profile_picture = models.ImageField(upload_to='profile_pics/', null=True, blank=True)
এখানে:
CustomUserমডেলটিAbstractUserথেকে ইনহেরিট করেছে, ফলে এর মধ্যে ইউজার সম্পর্কিত সব বেসিক ফিচার থাকবে (যেমনusername,password,email,first_name,last_nameইত্যাদি)।date_of_birth: ইউজারের জন্ম তারিখ।profile_picture: ইউজারের প্রোফাইল ছবি।
২. settings.py তে Custom User Model কনফিগার করা
Custom User Model তৈরি করার পর, আপনাকে এটি settings.py তে ডিফাইন করতে হবে। এটা নিশ্চিত করতে হবে যে Django আপনার কাস্টম ইউজার মডেলটি ব্যবহার করছে।
# settings.py
AUTH_USER_MODEL = 'myapp.CustomUser' # আপনার কাস্টম ইউজার মডেলের পথ
এখানে myapp আপনার অ্যাপের নাম এবং CustomUser আপনার কাস্টম ইউজার মডেল।
৩. মাইগ্রেশন তৈরি করা
কাস্টম ইউজার মডেল তৈরি করার পর, আপনাকে প্রথমে মাইগ্রেশন ফাইল তৈরি করতে হবে এবং তারপর ডেটাবেসে পরিবর্তনগুলো বাস্তবায়ন করতে হবে।
python manage.py makemigrations
python manage.py migrate
৪. ইউজার ম্যানেজার তৈরি করা
কাস্টম ইউজার মডেল ব্যবহার করার সময়, আপনি যদি ইউজার ম্যানেজার (User Manager) তৈরি করতে চান, তাহলে আপনাকে ইউজার ম্যানেজমেন্ট সিস্টেমকে আরও কাস্টমাইজ করতে হবে। উদাহরণস্বরূপ, কাস্টম ইউজার তৈরি করা:
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, username, email, password=None, **extra_fields):
if not email:
raise ValueError('The Email field must be set')
email = self.normalize_email(email)
user = self.model(username=username, email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(username, email, password, **extra_fields)
এখানে:
create_user: সাধারণ ইউজার তৈরি করার জন্য ব্যবহৃত হয়।create_superuser: সুপারইউজার তৈরি করার জন্য ব্যবহৃত হয়, যেখানেis_staffএবংis_superuserফিল্ডগুলো অটোমেটিকভাবেTrueকরা হয়।
৫. Django Admin এ কাস্টম ইউজার মডেল রেজিস্টার করা
আপনি যদি Django Admin প্যানেলে কাস্টম ইউজার মডেল ব্যবহার করতে চান, তাহলে admin.py ফাইলে এটিকে রেজিস্টার করতে হবে।
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
model = CustomUser
list_display = ['username', 'email', 'date_of_birth', 'is_staff']
list_filter = ['is_staff', 'is_superuser', 'is_active']
search_fields = ['username', 'email']
ordering = ['username']
admin.site.register(CustomUser, CustomUserAdmin)
এখানে:
CustomUserAdminDjango এর প্রি-বিল্টUserAdminএর কাস্টম সংস্করণ।list_display,list_filter,search_fieldsইত্যাদি কাস্টমাইজ করে Django Admin প্যানেলে ইউজারের তথ্য প্রদর্শন করা হয়।
সারাংশ
- Custom User Model তৈরি করলে আপনি ইউজার মডেলটিকে কাস্টমাইজ করতে পারেন, যেমন অতিরিক্ত ফিল্ড যোগ করা বা ইউজারের বেসিক ফিল্ডগুলোর পরিবর্তন করা।
- Django এর প্রি-বিল্ট
AbstractUserমডেল ব্যবহার করলে অনেক ফিচার স্বয়ংক্রিয়ভাবে পাওয়া যায়। CustomUserManagerব্যবহার করে ইউজার ম্যানেজমেন্ট সিস্টেম কাস্টমাইজ করা যায়।- Django Admin এ কাস্টম ইউজার মডেল রেজিস্টার করে আপনি ইউজার ম্যানেজমেন্ট সহজভাবে করতে পারেন।
Django তে Custom User Model তৈরি করলে ভবিষ্যতে আপনার অ্যাপের প্রয়োজনীয়তা অনুযায়ী ইউজার মডেল আরো কাস্টমাইজ করা সম্ভব।
Read more