Menu
CoddyTech

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 提供了已经实现常见功能的类。

challenge icon

挑战

简单

把主页改成一个类。

  1. 在 jobs/views.py 中,用 HomeView 替换函数 home。HomeView 是一个 View,它的 get() 方法要实现 home 原来的功能。
  2. 在 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 在线编辑器