内置基于类的视图 API¶
基于类的视图 API 参考。有关入门资料,请参阅基于类的视图主题指南。
规范¶
由基于类的视图提供服务的每个请求都具有独立的状态;因此,在实例上存储状态变量是安全的(即,self.foo = 3
是一个线程安全的操作)。
基于类的视图使用as_view()
类方法部署到 URL 模式中。
urlpatterns = [
path("view/", MyView.as_view(size=42)),
]
使用视图参数的线程安全
传递给视图的参数在视图的每个实例之间共享。这意味着您不应将列表、字典或任何其他可变对象作为参数传递给视图。如果您这样做并且修改了共享对象,则一个用户访问您的视图的操作可能会影响随后访问同一视图的用户。
传递到as_view()
的参数将被分配到用于服务请求的实例上。使用前面的示例,这意味着MyView
上的每个请求都可以使用self.size
。参数必须与类中已存在的属性相对应(在hasattr
检查上返回True
)。
基础视图与通用视图¶
基于类的基础视图可以被认为是父视图,可以单独使用或从中继承。它们可能无法提供项目所需的所有功能,在这种情况下,存在扩展基础视图功能的 Mixin。
Django 的通用视图基于这些基础视图构建,并作为显示对象详细信息等常见用法模式的快捷方式而开发。它们采用视图开发中发现的某些常见习惯用法和模式,并对其进行抽象,以便您可以快速编写数据的通用视图,而无需重复自己。
大多数通用视图都需要queryset
键,这是一个QuerySet
实例;有关QuerySet
对象的更多信息,请参阅执行查询。