首页
学习
活动
专区
圈层
工具
发布

基于类的通用视图:ListView 和 DetailView

对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的。首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...首先是需要根据从 URL 中捕获的分类 id(也就是 pk)获取分类,这和 category 视图函数中的过程是一样的。...不过注意一点的是,在类视图中,从 URL 捕获的命名组参数值保存在实例的 kwargs 属性(是一个字典)里,非命名组参数值保存在实例的 args 属性(是一个列表)里。...所以我们使了 self.kwargs.get('pk') 来获取从 URL 捕获的分类 id 值。...这对应着 detail 视图函数中根据文章的 id(也就是 pk)获取文章,然后对文章的 post.body 进行 Markdown 渲染的代码部分。

3.6K70

Django 官方推荐的姿势:类视图

对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...首先是需要根据从 URL 中捕获的分类 id(也就是 pk)获取分类,这和 category 视图函数中的过程是一样的。...不过注意一点的是,在类视图中,从 URL 捕获的路径参数值保存在实例的 kwargs 属性(是一个字典)里,非路径参数值保存在实例的 args 属性(是一个列表)里。...所以我们使了 self.kwargs.get('pk') 来获取从 URL 捕获的分类 id 值。...这对应着 detail 视图函数中根据文章的 id(也就是 pk)获取文章,然后对文章的 post.body 进行 Markdown 解析的代码部分。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    DRF二级视图GenericAPIView

    列表视图与详情视图通用 queryset 应用于从此视图返回对象的查询集。通常,您必须设置此属性或覆盖该get_queryset()方法。...通常,您必须设置此属性或覆盖该get_serializer_class()方法。 详情视图使用 lookup_field 应该用于执行单个模型实例的对象查找的模型字段。默认为’pk’....方法 列表视图与详情视图通用 get_queryset(self) 返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写,例如: def get_queryset...,被其他视图或扩展类使用,如果我们在视图中想要获取序列化器对象,可以直接调用此方法。...详情视图使用 get_object(self) 返回详情视图所需的模型类数据对象,默认使用lookup_field参数来过滤queryset。 在视图中可以调用该方法获取详情信息的模型类对象。

    88010

    DRF视图详解:从基础视图到通用视图实践指南

    新增了对查询集(QuerySet)和序列化器(Serializer)的标准化管理,为数据操作提供了统一接口核心类属性GenericAPIView 通过类属性定义了视图的核心配置,这些属性决定了视图如何获取数据...属性名 说明 queryset 视图使用的基础查询集,用于获取模型实例...数据查询相关方法get_queryset(self):返回视图使用的查询集,是获取数据的主要入口。...默认通过 lookup_field 从查询集中过滤对象,可重写以实现复杂查询逻辑(如多字段联合查询)。...get_paginated_response(self, data):返回分页格式的响应对象,配合分页功能使用。您正在阅读的是《Django从入门到实战》专栏!关注不迷路~

    31810

    DRF视图集

    DRF视图集 我们在三级视图中,由于获取所有数据和获取一条数据都是使用GET请求,而二级视图(三级视图)只允许有一个get方法,因此我们在两个类中进行了设计,并且这样刚好将路由分开。..., request, pk=None): pass def destroy(self, request, pk=None): pass 一个ViewSet类同时提供以下可用属性...在GenericAPIView中,没有提供任何动作action方法,需要我们自己覆盖该类并混合所需的混合类,或者明确定义操作实现action方法。..., id): user = get_object_or_404(self.get_queryset(), id=id) ser = self.get_serializer...这对于简单的场景是非常实用的,我们可以只提供queryset,serializer_class,pagination_class等属性即可。同时DRF提供了适用于视图集的路由来方便使用。

    1.3K10

    Django内置的通用类视图及实例

    方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...,各种有用的对象被存储在self上,同request(self.request)一样,其中包含了从URLconf中获取到的位置参数(self.args)和关键字参数(self.kwargs)....方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...显示用于编辑现有对象的表单的视图,重新显示具有验证错误信息的视图,并且保存对象.这里使用从对象模型自动生成的表单(除非手动制定表单类).

    4.4K40

    第 7 篇:文章详情的 API 接口

    get_object 方法通常情况下依据以下两点来筛选出单个资源对象: get_queryset 方法(或者 queryset 属性,get_queryset 方法返回的值优先)返回的资源列表对象。...lookup_field 属性指定的资源筛选字段(默认为 pk)。django-rest-framework 以该字段的值从 get_queryset 返回的资源列表中筛选出单个资源对象。...文章详情 Serializer 现在,假设我们要获取 id 为 1 的文章资源,访问获取单篇文章资源的 API 接口 http://127.0.0.1:10000/api/posts/1/,得到如下的返回结果...类似于视图集类的 queryset 属性和 get_queryset 方法的关系, serializer_class 属性的值也可以通过 get_serializer_class 方法返回的值覆盖,因此我们可以根据不同的...那么如何在视图集中区分不同的 action 动作呢?视图集有一个 action 属性,专门用来记录当前请求对应的动作。

    1.4K30

    Django内置的通用类视图CBV及示例

    方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...,各种有用的对象被存储在self上,同request(self.request)一样,其中包含了从URLconf中获取到的位置参数(self.args)和关键字参数(self.kwargs)....方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...显示用于编辑现有对象的表单的视图,重新显示具有验证错误信息的视图,并且保存对象.这里使用从对象模型自动生成的表单(除非手动制定表单类).

    4.5K10

    Django ORM 单表操作

    ,如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误 区别filter()如果获取不到符合条件的数据,返回一个空对象,不报错 from django.shortcuts import render...() 方法用于对数据进行去重,返回的是 QuerySet 类型数据 注意: 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在(主键不一样),去重的前提是数据必须是一模一样,不能加主键,有...也就是想要删除所有数据,不能不写 all; ORM 修改数据 方式一: 模型类的对象.属性 = 更改的属性值 模型类的对象.save() def book(request): book_obj...= models.Book.objects.filter(pk=23).first() print(book_obj) book_obj.title='如何傍富婆,从入门到入赘'...,可以在test下测试 方式二:使用对象.query获取原生SQL() from app01 import models res = models.Book.objects.filter(pk=2) print

    1.7K20

    DRF框架(六)——view视图里面继承GenericAPIView

    数据 群操作就走get_queryset()方法(包括群查,群增等) 2)get_object():从类属性queryset中获得model的queryset数据, 再通过有名分组...pk确定唯一操作对象 单操作就走get_object()方法(包括单查,单增等) 3)get_serializer():从类属性serializer_class中获得serializer的序列化类...() 从类属性queryset中获得model的queryset数据 ,查询多个数据 2.get_object() 从类属性queryset中获得model的queryset数据,再通过有名分组pk来确定唯一操作对象...也就是获取详情数据 3.get_serializer() 从类属性serializer_class中获得serializer的序列化类,主要用来提供给Mixin扩展类使用。...获取序列化器对象 详情页视图使用:(也就是在详情的view里面的方法中,我们还可以定义以下两个属性) lookup_field 自定义主键 有名分组的查询,默认是’pk’ lookup_url_kwarg

    78430

    Django来敲门~第一部分【9.使用Django内置视图处理对象简化开发】

    内置视图处理对象的定义 对于我们视图处理函数,从最原始的HttpResponse()来进行页面数据的输出,到render()函数进行模板页面的操作,已经是可以满足我们的需求了,但是Django赶脚还不够...): # 获取查询的问题对象 question = get_object_or_404(Question, pk=question_id) print(request.POST)...我们可以从上述代码中看到,继承自ListView视图处理类的类型,已经在内部封装好了分页操作功能,这也是我们项目中经常用到的技术呢,非常棒吧,我们继承了这个视图处理对象,就可以在后续的项目中,通过重写它的属性和方法来快捷的完成数据展示的分页功能了...我们可以在源代码中,看到各种操作的一些信息,官方注释用于使用对象数据来渲染详细信息页面的视图对象,继承的父类中,也定义了各种属性字段用于控制单个对象数据的展示操作 以上两个视图类,都间接继承了View...从基础文件view.py中,我们可以看到,各种视图模板的基础处理操作和视图类型的封装都有了简洁的定义,我们需要做的就是在项目中,继承这些Django已经封装好的对象,快捷的完成项目的开发。

    1.3K30

    drf之请求、响应、视图

    get_serializer(self, *args, **kwargs) :返回序列化器对象,主要用来提供给Mixin扩展类使用,如果我们在视图中想要获取序列化器对象,也可以直接调用此方法。...-request 当前视图的请求对象 -view 当前请求的类视图对象 -format 当前请求期望返回的数据格式 提供的关于数据库查询的属性与方法 属性:queryset  指明使用的数据查询集...方法: get_queryset(self) :返回视图使用的查询集,主要用来提供给Mixin扩展类使用,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写 get_object...在试图中可以调用该方法获取详情信息的模型类对象。**若详情访问的模型类对象不存在,会返回404。...3.2 action 在视图集中,我们可以通过action对象属性来获取当前请求视图集时的action动作是哪个。除了默认的方法动作外,还可以添加自定义动作。

    2.8K20

    drf框架中所有视图及用法

    ': 'retrieve', 'delete': 'remove_obj'}) GenericViewSet:与模型类有关的接口视图集 - 可以从mixins那继承功能,也可以自定义功能 ViewSet...:与模型类无关或不是标准模型类接口 - 一般都是自定义功能 三.generics中GenericAPIView使用 将 queryset 和 serializer_class 封装成类属性,提供了三个方法...self.get_queryset() :获取所有 self.get_object() :获取根据pk获取单个 self.get_serializer(*args, **kwargs):获取指定 常用的几个参数...data:用于返序列化传参 many:获取多个序列化对象 instance:如果有后面save执行更新方法,没有执行创建方法 partial:为True可以进行局部字段修改,默认为False为所有字段修改...使用这些方法的重要前提必须要 queryset serializer_class 如果我们要使用get_object()必须前端传给我们一个pk 四.mixins使用 mixins是在generics

    2.2K30

    Python Django性能测试与优化指南

    ,这个属性包含了实例的主键和模型的内容类型。...这意味着在你真正需要获取数据之前它不会访问数据库。同时,它只获取你指定的数据,如果需要其他附加数据,则要另外发出请求。 这正是本例程所遇到的情况。...1.2 仅提供相关的数据 默认情况下,Django会从数据库中提取所有字段。但是,当表有很多列很多行的时候,告诉Django提取哪些特定的字段就非常有意义了,这样就不会花时间去获取根本用不到的信息。...但是,现在的主要目标是缩短响应时间,所以该框架是优化的候选对象,尤其是我们要使用的序列化对象这个功能非常的简单。 为此,我们来编写一个自定义的序列化器。...由于散列是一个确定性的过程,这意味着对于一个给定的输入值,它必须始终生成相同的散列值,因此,我们可以把它作为类的一个属性。

    1.1K30
    领券