View 类
本课属于 Coddy Django 学习旅程的“基于类的视图”单元。第 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中,用HomeView替换函数home。HomeView是一个View,它的get()方法要实现home原来的功能。 - 在
jobs/urls.py中,将路由""指向这个类。保留name="home"。
点击“运行”:主页仍然显示 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 在线编辑器