内置基于类的视图API

基于类的视图的API 参考。 另请参见Class-based views 的简介。

说明书¶ T0>

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

基于类的视图在URL 模式中的部署使用as_view() 类方法:

urlpatterns = [
    url(r'^view/$', MyView.as_view(size=42)),
]

视图参数的线程安全性

传递给视图的参数在视图的每个实例之间共享。 这表示不应该使用列表、字典或其它可变对象作为视图的参数。 如果你真这么做而且对共享的对象做过修改,某个用户的行为可能对后面访问同一个视图的用户产生影响。

传递给as_view() 的参数将赋值给服务请求的实例。 利用前面的例子,这表示对self.size 的每个请求都可以使用 MyView 参数必须对应于在类中已经存在的属性(hasattr 检查可以返回True)。

Base vs Generic视图

基于类的基础视图可以认为是视图,它们可以直接使用或者继承它们。 它们不能满足项目中所有的需求,在这种情况下有Mixin 可以扩展基础视图的功能。

Django 的通用视图建立在基础视图之上,用于作为经常用到的功能的快捷方式,例如显示对象的详细信息。 它们提炼视图开发中常见的风格和模式并将它们抽象,这样你可以快速编写常见的视图而不用重复你自己。

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