دوره‌ها / Django / ویوها/نماها (Django Views)

ویوها/نماها (Django Views)

30 دقیقه Article

ویوها: مغز متفکر برنامه شما 🧠

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

ویو چیست؟ ویو یک تابع (یا کلاس) پایتونی است که یک درخواست HTTP رو می‌گیره و یک پاسخ HTTP برمی‌گردونه. ساده به نظر میاد، ولی قدرت زیادی داره!

انواع ویوها

در جنگو دو نوع اصلی ویو داریم:

  • Function-Based Views (FBV): ویوهای ساده که با توابع معمولی نوشته میشن. برای مبتدی‌ها و کارهای ساده عالین.
  • Class-Based Views (CBV): ویوهای پیشرفته‌تر که با کلاس‌ها نوشته میشن. برای کارهای پیچیده و کدهای قابل استفاده مجدد.

ساخت اولین ویو

بیایید یک ویوی خیلی ساده بسازیم:

# blog/views.py
from django.http import HttpResponse

def home(request):
    # ویوی صفحه اصلی - ساده‌ترین نوع ویو
    return HttpResponse("سلام! به وبلاگ من خوش اومدید! 🎉")

def about(request):
    # ویوی صفحه درباره ما
    return HttpResponse("

درباره ما

این یک وبلاگ ساده است.

")

پارامتر request چیه؟

شیء request یک گنجینه از اطلاعاته! توش می‌تونید پیدا کنید:

  • request.method: نوع درخواست (GET, POST, و...)
  • request.path: مسیر درخواست شده
  • request.user: کاربر فعلی (اگر لاگین کرده باشه)
  • request.GET: پارامترهای URL (مثل ?name=ali)
  • request.POST: داده‌های فرم ارسال شده

استفاده از render برای تمپلیت

به جای برگردوندن HTML خام، بهتره از تمپلیت‌ها استفاده کنیم:

# blog/views.py
from django.shortcuts import render

def home(request):
    # ویوی صفحه اصلی با تمپلیت
    context = {
        'title': 'صفحه اصلی',
        'posts': ['پست ۱', 'پست ۲', 'پست ۳']
    }
    return render(request, 'blog/home.html', context)
قانون طلایی: هر ویو باید یا یک HttpResponse برگردونه یا از render() استفاده کنه. اگر هیچکدوم رو برنگردونید، خطا می‌گیرید!
خطای رایج: فراموش کردن import کردن render یا HttpResponse یکی از رایج‌ترین خطاهای مبتدی‌هاست. همیشه import‌ها رو چک کنید!

🎯 تمرین عملی:

یک ویوی ساده بسازید که نام شما و تاریخ امروز رو نمایش بده. سپس اون رو به یک URL متصل کنید و در مرورگر تست کنید.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تمرین: ساخت ویوی ساده با Context Easy
سوال تمرین

🎯 تمرین عملی: ویوی صفحه خوش‌آمدگویی

در این تمرین، یک ویوی ساده می‌سازیم که اطلاعات کاربر رو نمایش بده:

  1. یک تابع ویو به نام welcome بنویسید که پارامتر request رو بگیره
  2. یک دیکشنری context بسازید که شامل نام کاربر، تاریخ امروز و یک پیام خوش‌آمدگویی باشه
  3. از render استفاده کنید تا یک تمپلیت به نام welcome.html رو نمایش بدید

راهنمایی: از datetime برای تاریخ و از request.user برای اطلاعات کاربر استفاده کنید.

پاسخ تمرین
PYTHON
from django.shortcuts import render
from datetime import datetime

def welcome(request):
    # ساخت context با اطلاعات کاربر
    user_name = request.user.username if request.user.is_authenticated else 'مهمان'
    current_date = datetime.now().strftime('%Y/%m/%d')
    message = f"خوش آمدید {user_name}! امروز {current_date} است."
    
    context = {
        'user_name': user_name,
        'current_date': current_date,
        'message': message
    }
    
    # استفاده از render برای نمایش تمپلیت
    return render(request, 'welcome.html', context)

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.