内置基于类的视图 API

基于类的视图 API 参考。关于介绍性材料,请参见 基于类的视图 主题指南。

规范

基于类的视图所服务的每个请求都有一个独立的状态,因此,在实例上存储状态变量是安全的(即,self.foo = 3 是一个线程安全的操作)。

基于类的视图使用 as_view() 类方法部署到一个 URL 模式中。

  1. urlpatterns = [
  2. path('view/', MyView.as_view(size=42)),
  3. ]

线程安全与视图参数

传递给视图的参数在视图的每个实例之间共享。这意味着你不应该使用列表、字典或任何其他可更改的对象作为视图的参数。如果你这样做了,而共享对象又被修改了,那么访问你视图的一个用户的行为可能会对访问同一视图的后续用户产生影响。

传入 as_view() 的参数将被分配到用于服务请求的实例上。使用前面的例子,这意味着在 MyView 上的每个请求都能够使用 self.size。参数必须与类上已经存在的属性相对应(在 hasattr 检查时返回 True)。

基础 vs 通用视图

基于类的基本视图可被视为 类视图,可自行使用或继承。它们可能无法提供项目所需的所有功能,在这种情况下,有混入来扩展基本视图的功能。

Django 的通用视图是在这些基础视图的基础上建立起来的,是作为显示对象详情等常见使用模式的快捷方式而开发的。它们采用了视图开发中的某些常见的习惯和模式,并将其抽象化,这样你就可以快速编写数据的通用视图,而不必重复。

大多数通用视图需要使用 queryset 键,它是一个 QuerySet 实例;关于 QuerySet 对象的更多信息,请参见 执行查询