
روز ۲۱: سیستم احراز هویت پیشفرض جنگو
یکی از مهمترین بخشهای توسعه وب، مدیریت کاربران و احراز هویت آنها است. جنگو یک سیستم احراز هویت پیشفرض قدرتمند ارائه میدهد که شامل مدلهای کاربر، فرمهای ثبتنام و ورود، مدیریت جلسات (Sessions) و دسترسیها است. این سیستم امکان ایجاد کاربران، ورود و خروج، تغییر رمز عبور و مدیریت گروهها و مجوزها را فراهم میکند. استفاده از این سیستم باعث میشود امنیت پروژه افزایش یافته و توسعهدهندگان بتوانند بدون نوشتن سیستم احراز هویت از صفر، قابلیتهای حرفهای مدیریت کاربران داشته باشند.
مدل User و ویژگیهای آن
مدل User در جنگو شامل فیلدهای پیشفرضی مانند username، password، email، first_name و last_name است. این مدل میتواند به صورت سفارشی گسترش یابد تا ویژگیهای اضافی مورد نیاز پروژه را نیز شامل شود. مدل User پایه تمام عملیات احراز هویت است و تمام فرمها و Viewهای ورود و ثبتنام به آن متکی هستند. تسلط بر مدل User برای درک جریان مدیریت کاربران ضروری است.
from django.contrib.auth.models import User # ایجاد یک کاربر جدید user = User.objects.create_user(username='ali', email='ali@example.com', password='secret123') user.is_active = True user.save()
در این مثال، یک کاربر جدید ایجاد شده و فعالسازی اولیه انجام شده است. استفاده از متد create_user باعث میشود رمز عبور به صورت امن هش شود و امنیت سیستم حفظ شود.
فرمهای ورود و ثبتنام
جنگو فرمهای آمادهای برای ثبتنام و ورود کاربران ارائه میدهد. فرمها شامل اعتبارسنجی و هش کردن رمز عبور هستند و توسعهدهنده نیازی به پیادهسازی دستی ندارد. این فرمها میتوانند در Viewها مورد استفاده قرار گیرند و تجربه کاربری استاندارد و ایمن فراهم کنند.
from django.contrib.auth.forms import UserCreationForm
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
else:
form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})در این مثال، فرم ثبتنام پیشفرض جنگو برای ایجاد کاربران جدید استفاده شده و پس از اعتبارسنجی، کاربر در پایگاه داده ذخیره میشود.
مدیریت جلسات و ورود کاربران
برای ورود کاربران از متدهای authenticate و login استفاده میکنیم. این متدها بررسی میکنند که نام کاربری و رمز عبور صحیح است یا خیر و پس از آن، کاربر وارد جلسه میشود. همچنین متد logout برای خروج کاربران استفاده میشود. مدیریت جلسات باعث میشود کاربران بتوانند تجربه شخصیسازیشده و امن داشته باشند.
from django.contrib.auth import authenticate, login, logout
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)این کد نحوه ورود کاربران و مدیریت session را نشان میدهد و پایه تمام عملیات امنیتی سایت است.
محدود کردن دسترسی به صفحات با Decoratorها
جنگو امکان محدود کردن دسترسی به Viewها را با استفاده از decoratorهایی مانند login_required فراهم میکند. این ویژگی باعث میشود صفحات خصوصی تنها برای کاربران وارد شده قابل مشاهده باشد و امنیت دادهها حفظ شود. همچنین میتوان مجوزهای خاص برای گروهها و کاربران مشخص کرد.
from django.contrib.auth.decorators import login_required
@login_required
def profile(request):
return render(request, 'profile.html')در این مثال، تنها کاربران وارد شده میتوانند به صفحه پروفایل دسترسی داشته باشند و کاربران دیگر به صفحه ورود هدایت میشوند.
سفارشیسازی مدل User
برای پروژههای بزرگ ممکن است نیاز به فیلدهای اضافی در مدل User داشته باشیم. جنگو امکان ایجاد Custom User Model را فراهم میکند که میتوان ویژگیهای اضافی مانند شماره تلفن، آواتار یا سطح دسترسی ویژه اضافه کرد. این قابلیت باعث میشود پروژههای بزرگ و پیچیده به راحتی مدیریت شوند و سیستم احراز هویت منعطف باقی بماند.
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True, null=True)با این کار، یک مدل کاربر سفارشی ایجاد شده که قابلیت اضافه کردن فیلدهای جدید و مدیریت دقیق کاربران را فراهم میکند.
جمعبندی روز بیست و یکم
در روز بیست و یکم، با سیستم احراز هویت پیشفرض جنگو آشنا شدیم. یاد گرفتیم چگونه کاربران ایجاد کنیم، از فرمهای ورود و ثبتنام استفاده کنیم، جلسات و دسترسیها را مدیریت کنیم و مدل User را سفارشیسازی نماییم. تسلط بر این بخش پایه امنیت و مدیریت کاربران در تمام پروژههای جنگو است و باعث میشود پروژهها حرفهای، امن و استاندارد باقی بمانند. یادگیری درست احراز هویت پایهای محکم برای توسعه وب و ایجاد سیستمهای مدیریت کاربران مطمئن و کارآمد است.