Menu
CoddyTech

מחלקת View

חלק מהיחידה תצוגות מבוססות מחלקות במסלול ה-Django של Coddy. שיעור 1 מתוך 18.

ביחידה הזאת נבנה לוח משרות, ודף הבית שלו הוא תצוגת פונקציה כמו כל התצוגות עד כה. Django מאפשרת גם לכתוב תצוגה בתור מחלקה: יוצרים מחלקת משנה של View ומוסיפים שיטה אחת לכל שיטת HTTP. בקשת GET קוראת ל־get(), ובקשת POST קוראת ל־post().

from django.views import View


class RecipeCountView(View):
    def get(self, request):
        total = Recipe.objects.count()
        return HttpResponse(f"{total} recipes")

השיטה מקבלת את self, אחר כך את request, ומחזירה תגובה, כמו שעושה תצוגת פונקציה. נתיב זקוק לפונקציה, ו־.as_view() יוצרת אחת מהמחלקה: path("count/", views.RecipeCountView.as_view()). בכל בקשה, הפונקציה הזאת יוצרת אובייקט חדש של המחלקה וקוראת לשיטה המתאימה.

בקשה ששיטת ה־HTTP שלה אינה מוגדרת במחלקה, כמו בקשת POST לתצוגה הזאת, מקבלת את התגובה 405 Method Not Allowed. היתרון מגיע בהמשך: Django מספקת מחלקות שכבר מבצעות את המשימות הנפוצות.

challenge icon

אתגר

קל

הפוך את דף הבית למחלקה.

  1. ב-jobs/views.py, החלף את הפונקציה home ב-HomeView, שהיא View שהמתודה get() שלה עושה את מה ש-home עשתה.
  2. ב-jobs/urls.py, הפנה את הנתיב "" אל המחלקה. השאר את name="home".

לחץ על Run: דף הבית עדיין מציג 12 jobs open.

נסו בעצמכם

from django.shortcuts import render

from .models import Job


def home(request):
    count = Job.objects.count()
    return render(request, "jobs/home.html", {"count": count})

כל השיעורים ביחידה תצוגות מבוססות מחלקות

תרגלו בעצמכם: Django אונליין