内置基于类的视图API

基于类的视图API参考。 有关介绍材料,请参阅Class-based views主题指南。

说明书¶ T0>

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

A class-based view is deployed into a URL pattern using the as_view() classmethod:

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

线程安全与查看参数

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

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

基础vs通用视图

可以将基于基类的视图视为视图,这些视图可以由它们自己使用或从中继承。 他们可能不会提供项目所需的所有功能,在这种情况下,Mixin可以扩展基本视图的功能。

Django的通用视图是基于这些基本视图构建的,并且被开发为常见使用模式的快捷方式,例如显示对象的细节。 他们采取一些在视图开发中常见的习惯用法和模式,并将它们抽象化,以便快速编写数据的共同视图,而不必重复自己。

大多数通用视图需要queryset键,它是一个QuerySet实例;有关QuerySet对象的更多信息,请参阅Making queries