SingleObjectMixin
-
class
django.views.generic.detail.
SingleObjectMixin
提供一个查找与当前 HTTP 请求相关联的对象的机制。
**方法和属性*
-
queryset
代表对象的
QuerySet
。如果提供,queryset
的值将取代为model
提供的值。警告
queryset
是一个类属性,它的值是 可变的,所以直接使用它时一定要注意。在使用它之前,要么调用它的all()
方法,要么用get_queryset()
检索它,它在幕后负责克隆。
-
query_pk_and_slug
如果
True
,使get_object()
使用主键和 slug 进行查找。默认值为False
。这个属性可以帮助减轻 不安全的直接对象引用 攻击。当应用程序允许通过顺序主键访问单个对象时,攻击者可以粗暴地强行猜测所有 URL,从而获得应用程序中所有对象的列表。如果应该阻止访问单个对象的用户获得这个列表,将
query_pk_and_slug
设置为True
将有助于防止URL的猜测,因为每个 URL 需要两个正确的、非顺序的参数。使用唯一的 slug 可以达到同样的目的,但是这个方案允许你使用非唯一的 slug。
-
get_object
(queryset=None) 返回该视图要显示的单个对象。如果提供了
queryset
,将使用该查询集作为对象的来源;否则,将使用get_queryset()
。get_object()
在视图的参数中寻找一个pk_url_kwarg
参数;如果找到这个参数,这个方法就使用这个值执行基于主键的查找。如果没有找到这个参数,则查找slug_url_kwarg
参数,并使用 :attr:`slug_field `执行 slug 查找。当
query_pk_and_slug
为True
时,get_object()
将使用主键和 slug 进行查找。
-
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
)。如果你在使用这个混入时没有使用内置视图,请务必这样做。它返回一个包含这些内容的字典:
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
一个混入类,为对单个对象实例进行操作的视图执行基于模板的响应渲染。要求与之混合的视图提供
self.object
,即该视图操作的对象实例。self.object
通常是,但不要求是 Django 模型的实例。如果视图正在构建一个新的实例,它可能是None
。扩展
**方法和属性*
讨论区