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()). בכל בקשה, הפונקציה הזאת יוצרת אובייקט חדש של המחלקה ומפעילה את המתודה המתאימה.

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

challenge icon

אתגר

קל

הפכו את דף הבית למחלקה:

  • ב־jobs/views.py, החליפו את הפונקציה home ב־HomeView, מחלקה שיורשת מ־View ושבה המתודה get() עושה את מה שעשתה home.
  • ב־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 אונליין