Một lớp view
Thuộc phần View dựa trên lớp trong hành trình Django của Coddy. Bài học 1 trên 18.
Phần này xây dựng một trang tuyển dụng, trong đó trang chủ là một view dạng hàm như mọi view từ trước đến nay. Django cũng cho phép bạn viết view dưới dạng lớp: bạn tạo lớp con từ View rồi thêm một phương thức cho mỗi phương thức HTTP. Yêu cầu GET gọi get(), còn yêu cầu POST gọi post().
from django.views import View
class RecipeCountView(View):
def get(self, request):
total = Recipe.objects.count()
return HttpResponse(f"{total} recipes")Phương thức nhận self, rồi đến request, và trả về một phản hồi, giống như view dạng hàm. Một tuyến đường cần một hàm, còn .as_view() tạo hàm từ lớp: path("count/", views.RecipeCountView.as_view()). Với mỗi yêu cầu, hàm đó tạo một đối tượng mới từ lớp và gọi phương thức tương ứng.
Yêu cầu có phương thức mà lớp không định nghĩa, chẳng hạn yêu cầu POST gửi đến view này, sẽ nhận phản hồi 405 Method Not Allowed. Phần hữu ích sẽ đến tiếp theo: Django cung cấp sẵn các lớp xử lý những tác vụ phổ biến.
Thử thách
DễChuyển trang chủ thành một lớp.
- Trong
jobs/views.py, thay hàmhomebằngHomeView, mộtViewcó phương thứcget()thực hiện những gìhomeđã làm. - Trong
jobs/urls.py, trỏ tuyến""đến lớp đó. Giữ nguyênname="home".
Nhấn Chạy: trang chủ vẫn hiển thị 12 jobs open.
Tự làm thử
from django.shortcuts import render
from .models import Job
def home(request):
count = Job.objects.count()
return render(request, "jobs/home.html", {"count": count})
Tất cả bài học trong View dựa trên lớp
Tự luyện tập: Playground Django