单一对象mixin¶
SingleObjectMixin
¶
- class django.views.generic.detail.SingleObjectMixin¶
提供查找与当前 HTTP 请求关联的对象的机制。
方法和属性
- queryset¶
表示对象的
QuerySet
。如果提供,queryset
的值将取代为model
提供的值。警告
queryset
是一个具有可变值的类属性,因此在直接使用时必须小心。在使用它之前,请调用它的all()
方法或使用get_queryset()
获取它,该方法会在后台处理克隆。
- slug_field¶
模型上包含 slug 的字段的名称。默认情况下,
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
。此属性可以帮助减轻不安全的直接对象引用攻击。当应用程序允许通过顺序主键访问单个对象时,攻击者可以暴力破解所有 URL;从而获取应用程序中所有对象的列表。如果应阻止有权访问单个对象的使用者获取此列表,则将
query_pk_and_slug
设置为True
将有助于防止猜测 URL,因为每个 URL 都需要两个正确的非顺序参数。使用唯一的 slug 可以达到同样的目的,但是这种方案允许您拥有非唯一的 slug。
- 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()¶
返回将用于检索此视图将显示的对象的queryset。默认情况下,
get_queryset()
返回queryset
属性的值(如果已设置),否则它通过在model
属性的默认管理器上调用all()
方法来构造一个QuerySet
。
- get_context_object_name(obj)¶
返回将用于包含此视图正在处理的数据的上下文变量名。如果未设置
context_object_name
,则上下文名称将根据queryset 所组成的模型的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