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