基于类的视图

    Django 提供了适用于很多应用的基本视图类。所有视图继承自 类,它处理视图链接到 URLs,HTTP 方法调度和其他简单功能。RedirectView 用于 HTTP 重定向, 扩展基类来使它能渲染模板。

    使用通用视图最直接的方式是在 URLconf 中直接创建它们。如果你只在基于类的视图上改变一些属性,那么你可以把它们传递到 as_view() 方法中调用:

    第二,使用通用视图更有力的方式是继承已存在的视图并覆盖子类里的属性(比如 )或方法(比如 get_context_data )来提供新的值或方法。例如,考虑只显示一个 about.html 模板的视图。Django 的 可以完成这个工作,因此我们可以将其子类化并重写模板名称:

    最后我们需要在 URLconf 中添加这个新视图。TemplateView 只是一个类,而不是一个函数,因此我们将 URL 指向 ,它为基于类的视图提供一个类似函数的入口:

    如果某人想将视图作为 API 来访问图书馆。API 客户端会时不时地连接并下载上次访问过后出版的书籍数据。但如果没有新的书籍出现,那么从数据库中获取书籍,渲染一个完整响应并发送它到客户端的话,这将浪费CPU时间和带宽。当出版最新的书时,它访问 API 最好。

    我们需要在 URLconf 中映射 URL 到书籍列表视图:

    如果从 请求访问视图,将在响应(使用 book_list.html 模板)中返回一个干净的对象列表。但如果客户端发出一个 HEAD 请求,那么将响应一个空 body 和 头将标识最新书籍的出版时间。基于这些信息,客户端可以选择是否下载一个完整的对象类。