Django

روز ۲۷: پروژه عملی ساخت سیستم کاربران کامل در جنگو

یکی از مهم‌ترین بخش‌های هر وب‌سایت یا اپلیکیشن تعاملی، سیستم مدیریت کاربران است که شامل ثبت‌نام، ورود، خروج، پروفایل کاربر، سطوح دسترسی و مدیریت Permissionها می‌شود. طراحی و پیاده‌سازی یک سیستم کاربران کامل در جنگو باعث می‌شود بتوانید تجربه‌ای حرفه‌ای و امن به کاربران ارائه دهید و پایه‌ای محکم برای توسعه وب‌سایت‌های بزرگ فراهم کنید. در این پروژه عملی، همه مفاهیم گذشته مانند فرم‌های ثبت‌نام و ورود، گسترش مدل User، پروفایل کاربری، LoginRequired، Permissionها و گروه‌ها را ترکیب می‌کنیم و یک سیستم یکپارچه و استاندارد ایجاد می‌کنیم که قابل استفاده در پروژه‌های واقعی باشد.

طراحی مدل‌ها و پروفایل کاربری

برای شروع، ابتدا باید مدل پروفایل کاربران را تعریف کنیم تا اطلاعات اضافی مانند بیوگرافی، تصویر پروفایل و شماره تماس را ذخیره کند. این مدل با رابطه OneToOne به مدل User پیش‌فرض جنگو متصل می‌شود تا هم از ساختار استاندارد User استفاده شود و هم امکان گسترش برای نیازهای پروژه فراهم باشد. طراحی مدل درست باعث می‌شود داده‌های کاربران منظم، امن و قابل دسترسی باشد و مدیریت آن‌ها در Viewها و Templateها ساده شود.

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(blank=True)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)
    phone_number = models.CharField(max_length=15, blank=True)

    def __str__(self):
        return self.user.username

این مدل پایه‌ای برای ساخت پروفایل کاربری فراهم می‌کند و امکان گسترش آن در آینده بسیار ساده است.

فرم‌های ثبت‌نام و ویرایش پروفایل

در مرحله بعد، فرم‌های ثبت‌نام کاربران و فرم‌های ویرایش پروفایل با استفاده از ModelForm ایجاد می‌شوند. فرم ثبت‌نام از فرم پیش‌فرض UserCreationForm استفاده می‌کند و امکان افزودن فیلدهای سفارشی مانند ایمیل یا شماره تلفن را دارد. فرم ویرایش پروفایل نیز امکان تغییر اطلاعات شخصی و آپلود تصویر پروفایل را فراهم می‌کند. این فرم‌ها با اعتبارسنجی داخلی جنگو امنیت داده‌ها را تضمین می‌کنند.

from django.contrib.auth.forms import UserCreationForm
from django import forms
from .models import Profile
from django.contrib.auth.models import User

class SignupForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['bio', 'avatar', 'phone_number']

این فرم‌ها پایه‌ای استاندارد و امن برای ثبت‌نام و مدیریت پروفایل کاربران فراهم می‌کنند.

پیاده‌سازی Viewها و محدودیت دسترسی

برای مدیریت کاربران، Viewهای مختلفی ایجاد می‌کنیم: ثبت‌نام، ورود، خروج، مشاهده و ویرایش پروفایل، داشبورد و صفحات مدیریت دسترسی‌ها. با استفاده از decorator login_required اطمینان حاصل می‌کنیم که تنها کاربران وارد شده به بخش‌های خصوصی دسترسی دارند. علاوه بر این، با استفاده از permission_required و گروه‌ها، سطوح دسترسی مختلف برای کاربران با نقش‌های متفاوت تعیین می‌شود و امنیت پروژه حفظ می‌شود.

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required, permission_required
from .forms import SignupForm, ProfileForm

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save()
            Profile.objects.create(user=user)
            return redirect('login')
    else:
        form = SignupForm()
    return render(request, 'registration/signup.html', {'form': form})

@login_required
def edit_profile(request):
    profile = request.user.profile
    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILES, instance=profile)
        if form.is_valid():
            form.save()
            return redirect('profile')
    else:
        form = ProfileForm(instance=profile)
    return render(request, 'edit_profile.html', {'form': form})

طراحی Templateهای حرفه‌ای

Templateهای سیستم کاربران باید تجربه کاربری روان و حرفه‌ای ارائه دهند. فرم‌ها باید با فیلدها و پیام‌های خطای واضح نمایش داده شوند و امکان آپلود فایل، نمایش تصویر پروفایل و بروزرسانی اطلاعات فراهم شود. استفاده از Templateهای استاندارد و مرتب باعث می‌شود کاربران راحت‌تر تعامل کنند و روند استفاده از سیستم کاربران لذت‌بخش باشد.

<!-- edit_profile.html -->
<h2>ویرایش پروفایل</h2>
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">ذخیره تغییرات</button>
</form>

این Template ساده و قابل فهم است و با CSRF Token امنیت فرم تضمین می‌شود.

مدیریت Permissionها و گروه‌ها

با استفاده از Groups و Permissionها می‌توانیم سیستم دسترسی دقیق ایجاد کنیم. گروه‌هایی مانند مدیر، ویراستار یا کاربر عادی تعریف می‌شوند و Permissionهای مورد نیاز هر گروه مشخص می‌شود. این سیستم باعث می‌شود که مدیریت کاربران و دسترسی‌ها آسان و استاندارد باشد و در پروژه‌های بزرگ، اعمال تغییرات سریع و بدون خطا انجام شود.

جمع‌بندی روز بیست و هفتم

در این پروژه عملی، تمام مفاهیم سیستم کاربران در جنگو شامل ثبت‌نام، ورود، خروج، پروفایل کاربری، فرم‌های سفارشی، محدود کردن دسترسی‌ها با login_required، استفاده از Permissionها و گروه‌ها ترکیب شدند تا یک سیستم کامل و حرفه‌ای ایجاد شود. تسلط بر این پروژه باعث می‌شود بتوانید سیستم‌های کاربران امن، قابل توسعه و استاندارد بسازید و پایه‌ای محکم برای توسعه وب‌سایت‌های مدرن و تعاملی داشته باشید. این تمرین عملی تجربه کاربردی و جامع برای مدیریت کاربران در پروژه‌های واقعی جنگو فراهم می‌کند و مهارت‌های شما را در طراحی سیستم‌های حرفه‌ای و امنیت محور تقویت می‌کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نه + دوازده =

دکمه بازگشت به بالا