Django单个对象SingleObjectMixin与SingleObjectTemplateResponseMixin

本文深入探讨了Django框架中的SingleObjectMixin和SingleObjectTemplateResponseMixin,详细介绍了这两个mixin的功能、属性及方法,包括如何使用它们来提供与HTTP请求相关联的对象,以及如何执行基于模板的响应呈现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于类的通用视图 - 展平索引

一、SingleObjectMixin

        django.views.generic.detail.SingleObjectMixin
用于提供查找与当前HTTP请求相关联的对象的机制。

方法和属性

model
数据模型,将在视图页面展示数据。

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可能会起到同样的作用,但这种方案允许你拥有非独特的slu ..

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属性的值(如果已设置),否则QuerySet通过调用属性的默认管理器all()上的方法来构造model。

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将覆盖上下文处理器中的user变量django.contrib.auth.context_processors.auth()。使用get_context_object_name()以避免冲突。

get_slug_field()
返回用于通过slug查找的slug字段的名称。默认情况下,这只返回值slug_field。


二、SingleObjectTemplateResponseMixin

       django.views.generic.detail.SingleObjectTemplateResponseMixin
一个mixin类,它为对单个对象实例进行操作的视图执行基于模板的响应呈现。
扩展

TemplateResponseMixin
方法和属性

template_name_field
当前对象实例上的字段,可用于确定候选模板的名称。
template_name_suffix
附加到自动生成的候选模板名称的后缀。默认后缀是_detail。
get_template_names()
返回候选模板名称列表。返回以下列表:

template_name视图上的值(如果提供)
template_name_field视图所在的对象实例上的字段内容(如果可用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值