מחלקת 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 מספקת מחלקות שכבר מבצעות את המשימות הנפוצות.
אתגר
קלהפוך את דף הבית למחלקה.
- ב-
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 אונליין