单个对象混合¶
SingleObjectMixin
¶
-
class
django.views.generic.detail.
SingleObjectMixin
¶ 提供用于查找与当前HTTP请求相关联的对象的机制。
方法和属性
-
queryset
¶ 表示对象的
QuerySet
。如果提供,queryset
的值将取代为model
提供的值。警告
queryset
是具有 mutable 值的类属性,因此在直接使用它时必须小心。在使用它之前,要么调用其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()
使用主键和子程序执行查找。默认为False
。此属性可以帮助减轻 insecure direct object reference 攻击。当应用程序允许通过顺序主键访问单个对象时,攻击者可以暴力猜测所有URL;从而获得应用程序中的所有对象的列表。如果应该阻止访问单个对象的用户获取此列表,将
query_pk_and_slug
设置为True
将有助于防止猜测URL,因为每个URL都需要两个正确的非连续参数。简单地使用独特的lug lug可能有相同的目的,但这种方案允许你有非独特的。。。
-
get_object
(queryset=None)¶ 返回此视图将显示的单个对象。如果提供
queryset
,那么该查询集将用作对象的来源;否则将使用get_queryset()
。get_object()
在视图的参数中查找pk_url_kwarg
参数;如果找到此参数,则此方法使用该值执行基于主键的查找。如果找不到此参数,它将查找slug_url_kwarg
参数,并使用slug_field
执行slug查找。当
query_pk_and_slug
是True
时,get_object()
将使用主键和子程序执行其查找。
-
get_queryset
()¶ 返回将用于检索此视图将显示的对象的查询集。默认情况下,
get_queryset()
返回queryset
属性的值,如果它被设置,否则它通过调用model
属性的默认管理器上的all()
方法构造一个QuerySet
。
-
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_name
:self.object
也将存储在get_context_object_name()
返回的名称下,默认为模型名称的小写版本。
上下文变量覆盖模板上下文处理器中的值
来自
get_context_data()
的任何变量优先于来自 上下文处理器 的上下文变量。例如,如果您的视图将model
属性设置为User
,则user
的默认上下文对象名称将覆盖django.contrib.auth.context_processors.auth()
上下文处理器中的user
变量。使用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
。扩展
方法和属性
-
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
-