
روز ۲۵: پروفایل کاربر و گسترش User Model در جنگو
در اکثر وبسایتها و اپلیکیشنهای مدرن، کاربران علاوه بر ورود و ثبتنام، نیاز دارند پروفایل شخصی خود را مدیریت کنند، اطلاعات خود را بهروزرسانی کنند و نمایهای از دادههای شخصی و فعالیتهایشان داشته باشند. جنگو با سیستم احراز هویت پیشفرض و امکان گسترش مدل User، ابزارهای قدرتمندی برای ایجاد پروفایل کاربری فراهم میکند. این ویژگیها باعث میشوند کاربران تجربه شخصیسازی شده دریافت کنند و توسعهدهندگان بتوانند اطلاعات اضافی و دلخواه را بدون آسیب به ساختار استاندارد User ذخیره و مدیریت کنند.
ساخت پروفایل با مدل User
مدل پیشفرض User در جنگو شامل فیلدهایی مانند username، email، password، first_name و last_name است. برای پروژههایی که نیاز به فیلدهای اضافی دارند، میتوان مدل User را با یک مدل مرتبط گسترش داد یا از Custom User Model استفاده کرد. این روش انعطاف لازم برای ذخیره اطلاعاتی مانند عکس پروفایل، شماره تماس، آدرس یا سطح دسترسی کاربران را فراهم میکند و ساختار امنیتی و استاندارد جنگو حفظ میشود.
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در این مثال، مدل Profile با رابطه OneToOne به مدل User متصل شده و فیلدهای اضافی مانند bio، avatar و phone_number برای ذخیره دادههای بیشتر کاربران اضافه شده است. این ساختار باعث میشود پروفایل کاربری منعطف و قابل گسترش باشد.
ایجاد فرمهای ویرایش پروفایل با ModelForm
برای ایجاد صفحات پروفایل و امکان ویرایش اطلاعات، میتوان از ModelForm استفاده کرد. ModelForm به ما اجازه میدهد تا فیلدهای مدل را به راحتی در فرمها نمایش دهیم و دادهها را اعتبارسنجی کنیم. این روش امنیت و سرعت توسعه را افزایش میدهد و تجربه کاربری روان ایجاد میکند.
from django import forms
from .models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['bio', 'avatar', 'phone_number']با این فرم، کاربران میتوانند اطلاعات خود را به صورت امن و استاندارد بهروزرسانی کنند و دادهها مستقیماً در پایگاه داده ذخیره شوند.
اتصال فرم به View و Template
برای نمایش پروفایل و امکان ویرایش آن، فرم در View رندر میشود و Template مناسب طراحی میشود. استفاده از decorator login_required تضمین میکند که تنها کاربران وارد شده بتوانند پروفایل خود را مشاهده و ویرایش کنند. این ترکیب امنیت و تجربه کاربری استاندارد را فراهم میکند.
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import ProfileForm
@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})در این View، فرم با دادههای موجود کاربران پر شده و پس از ارسال، اطلاعات بهروزرسانی میشود. همچنین فایلهای آپلودی مانند avatar نیز مدیریت میشوند.
طراحی 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 امنیت فرم تضمین میشود.
جمعبندی روز بیست و پنجم
در روز بیست و پنجم، با گسترش User Model و ایجاد پروفایل کاربری در جنگو آشنا شدیم. یاد گرفتیم چگونه مدل Profile را با رابطه OneToOne به User متصل کنیم، فرم ویرایش پروفایل با ModelForm ایجاد کنیم، Viewها و Templateها را به شکل امن مدیریت کنیم و امکان آپلود فایل و بهروزرسانی اطلاعات کاربران را فراهم کنیم. تسلط بر این بخش باعث میشود سیستم مدیریت کاربران حرفهای و انعطافپذیر باشد و تجربه کاربری استاندارد و ایمن ارائه شود. یادگیری درست مدیریت پروفایل کاربر پایهای محکم برای توسعه پروژههای پیچیده و وبسایتهای مدرن با جنگو است.