SingleObjectMixin
¶提供查找与当前HTTP请求关联的对象的机制。
方法和属性
此视图将为其显示数据的模型。指定 model = Foo
实际上与指定 queryset = Foo.objects.all()
在哪里 objects
代表 Foo
的 default manager .
A QuerySet
表示对象的。如果提供,则 queryset
取代为提供的值 model
.
警告
queryset
是具有 易变的 因此,直接使用时必须小心。在使用它之前,请先调用它 all()
方法或检索 get_queryset()
它负责幕后的复制。
包含段塞的模型上字段的名称。默认情况下, slug_field
是 'slug'
.
包含slug的urlconf关键字参数的名称。默认情况下, slug_url_kwarg
是 'slug'
.
包含主键的urlconf关键字参数的名称。默认情况下, pk_url_kwarg
是 'pk'
.
指定要在上下文中使用的变量的名称。
如果 True
原因 get_object()
使用主键和slug执行查找。默认为 False
.
此属性可以帮助缓解 insecure direct object reference 攻击当应用程序允许通过顺序公钥访问单个对象时,攻击者可以强行猜测所有URL;从而获得应用程序中所有对象的列表。如果应阻止有权访问各个对象的用户获取此列表,请设置 query_pk_and_slug
至 True
将有助于防止对URL的猜测,因为每个URL都需要两个正确的、非顺序的参数。使用独特的蛞蝓可能达到同样的目的,但该计划允许您拥有非独特的蛞蝓。
返回此视图将显示的单个对象。如果 queryset
如果提供,则该查询集将用作对象的源;否则, get_queryset()
将被使用。 get_object()
寻找一个 pk_url_kwarg
视图参数中的参数;如果找到此参数,则此方法使用该值执行基于主键的查找。如果找不到该参数,它将查找 slug_url_kwarg
参数,并使用 slug_field
.
什么时候? query_pk_and_slug
是 True
, get_object()
将使用主键和slug执行查找。
返回将用于检索此视图将显示的对象的查询集。默认情况下, get_queryset()
返回的值 queryset
属性,否则它将构造 QuerySet
通过调用 all()
方法在 model
属性的默认管理器。
返回将用于包含此视图正在操作的数据的上下文变量名。如果 context_object_name
未设置,将从 model_name
查询集所组成的模型的。例如,模型 Article
将具有名为的上下文对象 'article'
.
返回用于显示对象的上下文数据。
此方法的基本实现要求 self.object
属性由视图设置(即使 None
)如果在没有内置视图的情况下使用此mixin,请确保这样做。
它返回包含以下内容的字典:
object
:此视图显示的对象 (self.object
)
context_object_name
: self.object
也将以返回的名称存储 get_context_object_name()
,默认为模型名称的最低版本。
上下文变量重写模板上下文处理器中的值
任何变量来自 get_context_data()
优先于上下文变量 context processors . 例如,如果视图设置了 model
属性到 User
,的默认上下文对象名称 user
将覆盖 user
变量来自 django.contrib.auth.context_processors.auth()
上下文处理器。使用 get_context_object_name()
为了避免冲突。
返回用于按slug查找的slug字段的名称。默认情况下,这返回的值 slug_field
。
SingleObjectTemplateResponseMixin
¶一个mixin类,它为操作单个对象实例的视图执行基于模板的响应呈现。要求与之混合的视图提供 self.object
,视图正在操作的对象实例。 self.object
通常是,但不要求是,Django模型的一个实例。它可能是 None
如果视图正在构造新实例。
Extends
方法和属性
当前对象实例上可用于确定候选模板名称的字段。如果任一 template_name_field
自身或 template_name_field
在当前对象实例上 None
,该对象将不用于候选模板名称。
要附加到自动生成的候选模板名称的后缀。默认后缀为 _detail
.
返回候选模板名称列表。返回以下列表:
价值 template_name
在视图上(如果提供)
的内容 template_name_field
视图正在操作的对象实例上的字段(如果可用)
<app_label>/<model_name><template_name_suffix>.html
7月 22, 2024