首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于类通用视图:ListView 和 DetailView

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

2.6K70

Django 官方推荐姿势:类视图

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

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

DRF二级视图GenericAPIView

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

67010

浅谈在django中使用filter()(即对QuerySet操作)时踩

(message[0].content) message[0].save() 可正常QuerySet中读取数据,并打印出来,无误。...(1)all()返回QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。...例如有Book表,其包含bookname,booknum两个属性如何使用Objects.all(),得到bookname和booknum值 (2)filter() 返回QuerySet对象,与...(3)get()返回是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据。 来看一个QuerySet对象: ?...message = Message.objects.filter(pk=message_id2) message[0].content 这样子确实可以读取到QuerySet数据,可是对QuerySet

4K10

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...显示用于编辑现有对象表单视图,重新显示具有验证错误信息视图,并且保存对象.这里使用对象模型自动生成表单(除非手动制定表单类).

2.9K40

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提供了适用于视图集路由来方便使用。

90810

第 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 属性,专门用来记录当前请求对应动作。

99830

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...显示用于编辑现有对象表单视图,重新显示具有验证错误信息视图,并且保存对象.这里使用对象模型自动生成表单(除非手动制定表单类).

3.2K10

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.3K20

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

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

59930

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

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

88630

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.1K20
领券