单对象混合

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

提供查找与当前HTTP请求关联的对象的机制。

方法和属性

model

此视图将为其显示数据的模型。指定 model = Foo 实际上与指定 queryset = Foo.objects.all() 在哪里 objects 代表 Foodefault manager .

queryset

A QuerySet 表示对象的。如果提供,则 queryset 取代为提供的值 model .

警告

queryset 是具有 易变的 因此,直接使用时必须小心。在使用它之前,请先调用它 all() 方法或检索 get_queryset() 它负责幕后的复制。

slug_field

包含段塞的模型上字段的名称。默认情况下, slug_field'slug' .

slug_url_kwarg

包含slug的urlconf关键字参数的名称。默认情况下, slug_url_kwarg'slug' .

pk_url_kwarg

包含主键的urlconf关键字参数的名称。默认情况下, pk_url_kwarg'pk' .

context_object_name

指定要在上下文中使用的变量的名称。

query_pk_and_slug

如果 True 原因 get_object() 使用主键和slug执行查找。默认为 False .

此属性有助于减轻 insecure direct object reference 攻击。当应用程序允许通过顺序主键访问单个对象时,攻击者可以强行猜测所有URL;从而获得应用程序中所有对象的列表。如果应阻止具有访问单个对象权限的用户获取此列表,请设置 query_pk_and_slugTrue 这将有助于防止猜测网址,因为每个网址将需要两个正确的,非连续的参数。使用一个唯一的slug可以达到同样的目的,但是这个方案允许您使用非惟一的slug。

get_object(queryset=None)

返回此视图将显示的单个对象。如果 queryset 如果提供,则该查询集将用作对象的源;否则, get_queryset() 将被使用。 get_object() 寻找一个 pk_url_kwarg 视图参数中的参数;如果找到此参数,则此方法使用该值执行基于主键的查找。如果找不到该参数,它将查找 slug_url_kwarg 参数,并使用 slug_field .

什么时候? query_pk_and_slugTrueget_object() 将使用主键和slug执行查找。

get_queryset()

返回将用于检索此视图将显示的对象的查询集。默认情况下, get_queryset() 返回的值 queryset 属性,否则它将构造 QuerySet 通过调用 all() 方法在 model 属性的默认管理器。

get_context_object_name(obj)

返回将用于包含此视图正在操作的数据的上下文变量名。如果 context_object_name 未设置,将从 model_name 查询集所组成的模型的。例如,模型 Article 将具有名为的上下文对象 'article' .

get_context_data(**kwargs)

返回用于显示对象的上下文数据。

此方法的基本实现要求 self.object 属性由视图设置(即使 None )如果在没有内置视图的情况下使用此mixin,请确保这样做。

它返回包含以下内容的字典:

  • object :此视图显示的对象 (self.object

  • context_object_nameself.object 也将以返回的名称存储 get_context_object_name() ,默认为模型名称的最低版本。

上下文变量重写模板上下文处理器中的值

任何变量来自 get_context_data() 优先于上下文变量 context processors . 例如,如果视图设置了 model 属性到 User ,的默认上下文对象名称 user 将覆盖 user 变量来自 django.contrib.auth.context_processors.auth() 上下文处理器。使用 get_context_object_name() 为了避免冲突。

get_slug_field()

返回要按slug查找的slug字段的名称。默认情况下,返回值 slug_field .

SingleObjectTemplateResponseMixin

class django.views.generic.detail.SingleObjectTemplateResponseMixin

一个mixin类,它为操作单个对象实例的视图执行基于模板的响应呈现。要求与之混合的视图提供 self.object ,视图正在操作的对象实例。 self.object 通常是,但不要求是,Django模型的一个实例。它可能是 None 如果视图正在构造新实例。

Extends

方法和属性

template_name_field

当前对象实例上可用于确定候选模板名称的字段。如果任一 template_name_field 自身或 template_name_field 在当前对象实例上 None ,该对象将不用于候选模板名称。

template_name_suffix

要附加到自动生成的候选模板名称的后缀。默认后缀为 _detail .

get_template_names()

返回候选模板名称列表。返回以下列表:

  • 价值 template_name 在视图上(如果提供)

  • 的内容 template_name_field 视图正在操作的对象实例上的字段(如果可用)

  • <app_label>/<model_name><template_name_suffix>.html