SingleObjectMixin

SingleObjectMixin

django.views.generic.detail.SingleObjectMixin类 提供一种机制来查找与当前HTTP请求关联的对象。

方法和属性

model

该视图将显示其数据的模型。指定model = Foo实际上与指定queryset = Foo.objects.all()相同,其中object充当Foo的默认管理器。

queryset

代表对象的QuerySet。如果指定,则queryset的值将取代为模型提供的值。

警告

queryset是具有可变值的类属性,因此在直接使用它时必须小心。在使用它之前,要么调用其all()方法,要么使用get_queryset()进行检索,该方法负责后台的克隆。

slug_field

模型中包含该段的字段的名称。默认情况下,slug_field为'slug'

slug_url_kwarg

包含该段的URLConf关键字参数的名称。默认情况下,slug_url_kwarg为'slug'。

pk_url_kwarg

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

context_object_name

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

query_pk_and_slug

如果为True,则使get_object()使用pk和slug执行查找。默认为False。

此属性可以帮助减轻不安全的直接对象引用攻击。当应用程序允许通过顺序的主键访问单个对象时,攻击者可能会用蛮力猜测所有URL。从而获得应用程序中所有对象的列表。如果应该阻止有权访问单个对象的用户获取此列表,请将query_pk_and_slug设置为True将有助于防止URL的猜测,因为每个URL都需要两个正确的非连续参数。简单地使用唯一的块可以达到相同的目的,但是此方案允许您拥有非唯一的块。

get_object(queryset = None)

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

当query_pk_and_slug为True时,get_object()将同时使用主键和slug进行查找。

get_queryset()

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

get_context_object_name(obj)

返回上下文变量名,该上下文变量名将用于包含此视图正在处理的数据。如果未设置context_object_name,则上下文名称将从查询集所基于的模型的model_name构造。例如,模型Article将具有名为“ article”的上下文对象。

get_context_data(** kwargs)

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

此方法的基本实现要求由视图设置self.object属性(即使None)。如果您在没有任何内置视图的情况下使用此混入,请确保执行此操作。

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

  • object:此视图显示的对象(self.object)。
  • context_object_name:self.object也将以get_context_object_name()返回的名称存储,该名称默认为模型名称的小写版本。 上下文变量覆盖模板上下文处理器中的值

get_context_data()中的任何变量优先于上下文处理器中的上下文变量。例如,如果您的视图将model属性设置为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。

延伸

  • TemplateResponseMixin 方法和属性

template_name_field

当前对象实例上的字段,可用于确定候选模板的名称。 如果template_name_field本身或当前对象实例上的template_name_field的值为None,则该对象将不用作候选模板名称。

template_name_suffix

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

get_template_names()

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

视图上template_name的值(如果提供) 视图所操作的对象实例上template_name_field字段的内容(如果有) / .html