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

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

() 方法,可以实现动态过滤查询集,例如只返回当前登录用户的数据:def get_queryset(self): # 只返回当前用户创建的数据 return Student.objects.filter...常用类方法GenericAPIView 提供了一系列方法用于处理查询集、对象实例和序列化器,这些方法是构建数据交互逻辑的核心。...数据查询相关方法get_queryset(self):返回视图使用的查询集,是获取数据的主要入口。...默认返回 queryset 属性定义的查询集,可重写以实现动态过滤(如返回当前用户的数据)def get_queryset(self): return self.request.user.articles.all...filter_queryset(self, queryset):应用过滤后端对查询集进行过滤,返回处理后的查询集。

31810

django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)

你有两个原因可能会自己定义管理器:向器类中添加额外的方法,或者修改管理器最初返回的查询集。...在这种情况下,使用 模型方法 比使用自定义的管理器方法要更好。) 自定义的管理器 方法可以返回你想要的任何数据,而不只是查询集。...你可以通过重写 Manager.get_queryset() 的方法来覆盖 管理器自带的 查询集。get_queryset() 会根据你所需要的属性返回 查询集。...由于 get_queryset() 返回的是一个 查询集 对象,所以你仍可以对它使用 filter(), exclude()和其他 查询集的方法。...调用自定义的查询集 虽然大多数标准查询集的方法可以从管理器中直接访问到,但是这是一个例子,访问了定义在自定义 查询集上的额外方法,如果你也在管理器上面实现了它们: class PersonQuerySet

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

    【愚公系列】2022年04月 Python教学课程 74-DRF框架之过滤

    4.3 嵌套查找 4.4 参数说明 4.5 自定义过滤器 一、普通过滤 REST 框架的通用列表视图的默认行为是返回模型管理器的整个查询集。...通常,您希望 API 限制查询集返回的项目。 筛选子类的任何视图的查询集的最简单方法是重写该方法。...GenericAPIView.get_queryset() 重写此方法允许您以多种不同的方式自定义视图返回的查询集。...1.针对当前用户进行筛选 您可能希望筛选查询集,以确保仅返回与发出请求的当前经过身份验证的用户相关的结果。 为此,可以基于用户值进行筛选。...如果使用多个搜索词,则仅当所有提供的词都匹配时,才会在列表中返回对象。 搜索行为可能会因在 前面加上各种字符而受到限制。search_fields “^”以搜索开头。 “=”完全匹配。

    3.2K30

    DRF二级视图GenericAPIView

    列表视图与详情视图通用 queryset 应用于从此视图返回对象的查询集。通常,您必须设置此属性或覆盖该get_queryset()方法。...如果您要覆盖视图方法,请务必调用get_queryset()而不是直接访问此属性。 serializer_class 应该用于验证和反序列化输入以及序列化输出的序列化器类。...过滤 filter_backends 应用于过滤查询集的过滤器后端类列表。默认值与DEFAULT_FILTER_BACKENDS设置相同。...方法 列表视图与详情视图通用 get_queryset(self) 返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写,例如: def get_queryset...如果不清楚DRF分页器的,可以看这里 列表和新增视图 列表视图中,每次按照分页大小返回多个数据。如下图所示,我们使用百度搜索的时候,百度会以分页的形式给我们展示数据。

    88010

    从入门到精通Django REST Framework-(五)

    减少重复代码 - 提供了常见操作的标准实现,如获取查询集、序列化数据等提高开发效率 - 内置了分页、过滤、排序等功能代码组织更清晰 - 将通用逻辑与业务逻辑分离易于扩展 - 可以通过重写方法来自定义行为与...() # 所有图书get_queryset() 方法:允许动态定义查询集,比如基于当前用户过滤数据。...,不需要根据请求动态变化使用 get_queryset() 方法:当需要根据请求用户、查询参数等动态调整查询集2....对象查找(lookup_field 和 lookup_url_kwarg)这两个属性控制如何从 URL 中获取单个对象。lookup_field:模型中用于查找对象的字段名,默认为 'pk'。...self.filter_queryset() 应用过滤在 filter_queryset 中,首先调用父类方法应用配置的过滤器然后遍历所有查询参数,检查是否与模型字段匹配对于匹配的参数,构建过滤条件并应用到查询集最后序列化过滤后的查询集并返回响应使用示例假设

    96710

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

    通常在使用时,可以配合一个或多个Mixin扩展类 重点:GenericAPIView在APIView基础上完成了哪些事 1)get_queryset():从类属性queryset中获得model的queryset...数据 群操作就走get_queryset()方法(包括群查,群增等) 2)get_object():从类属性queryset中获得model的queryset数据, 再通过有名分组...获取序列化器对象 详情页视图使用:(也就是在详情的view里面的方法中,我们还可以定义以下两个属性) lookup_field 自定义主键 有名分组的查询,默认是’pk’ lookup_url_kwarg...(GenericAPIView): """列表视图""" # 指定序列化器类 serializer_class = BookInfoModelSerializer # 指定查询集...继承GenericAPIView查询一个,也就是详情 详情页视图使用:(也就是在详情的view里面的方法中,我们还可以定义以下两个属性) lookup_field 自定义主键 有名分组的查询,默认是

    78430

    Django模型model

    :book=TestInfo. tests.create_ test("abc",datetime(1980,1,1))保存:test.save() 修改管理器返回的原始查询集:重写get_queryset...模型类的查询 查询集表示从数据库中获取的对象集合 查询集可以含有零个、一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句...接下来主要讨论如下知识点 查询集 字段查询:比较运算符,F对象,Q对象(1)模型类查询集合 在管理器上调用过滤器方法会返回查询集 查询集经过过滤器筛选后返回新的查询集,因此可以写成链式过滤 惰性执行:...创建查询集不会带来任何数据库的访问,直到调用数据时,才会访问数据库 何时对查询集求值:迭代,序列化,与if合用 返回查询集的方法,称为过滤器,管理器对象方法有all()、filter()、exclude...,但是如果这部分不在缓存中,那么接下来查询返回的记录将不会被缓存,这意味着使用索引来限制查询集将不会填充缓存,如果这部分数据已经被缓存,则直接使用缓存中的数据 比较运算符:表示两个下划线,左侧是属性名称

    2.6K10

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

    表示对象列表的一个页面. 执行这个视图的时候,self.object_list将包含视图正在操作的对象列表(通常是一个查询集,但不是必须)....方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...,并重定向到get_success_url(),可以覆盖该方法在以上行为之间添加额外的动作.该方法必须返回一个HttpResponse. form_invalid(form):如果表单验证失败,则使用已填充的表单数据和错误信息重新渲染上下文

    4.4K40

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

    表示对象列表的一个页面. 执行这个视图的时候,self.object_list将包含视图正在操作的对象列表(通常是一个查询集,但不是必须)....方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...,并重定向到get_success_url(),可以覆盖该方法在以上行为之间添加额外的动作.该方法必须返回一个HttpResponse. form_invalid(form):如果表单验证失败,则使用已填充的表单数据和错误信息重新渲染上下文

    4.5K10

    django优雅的实现软删除,支持Admin和DRF的软删除

    同样的,DRF对外操作的其他接口,如查询,修改操作,就不允许找到已经软删除的数据。 自带的Admin 既然是超级管理后台,那么就允许操作任何数据,包括已经软删除的,而不是列表找不到软删除的数据。...有没有想过它到底是什么? 显然,默认的模型Manager并不能解决我们的问题,所以我们需要自定义模型的Manager。...class ModelManager(models.Manager): # 重写get_queryset方法 def get_queryset(self): # 查询出所有的数据...可以发现,由于模型Manager的加持,直接把is_deleted的数据一并过滤了。但是我们并不想如此。 所以第一反应,就是去注册模型的地方,重写模型的查询。...方法是执行获取查询的,那么把它重写了。

    3.2K40

    重点内容回顾-DRF

    不知道你有没有听说过一个词『大智若愚』,它是一种大智慧,有德有智,看透万物,但是不去计较那么多。将格局放大,将眼光放远,你会发现不一样的世界。...5.3序列化&反序列化 下面从我们最近推文的项目来简单的理解两个概念。 序列化:将模型对象转换为字典或者json数据的过程。 反序列化:将前端传递的数据保存到模型对象中的过程。...数据库查询 属性: queryset(指定视图所使用的查询集) 方法: get_queryset返回视图所使用的查询集 get_object从视图所使用的查询集中查询指定的对象,默认根据pk进行查询。...使用场景: 根据不同的操作返回不同的序列化器类和不同的查询集,重写 get_serializer_class和 get_queryset方法。...返回latest操作使用的查询集 else: # 返回其他操作所使用的查询集 5.6.6路由Router 作用 配合视图集进行使用,动态生成视图集中处理函数的url配置项。

    3.5K20

    【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)

    推荐一款找工作神器网站: 宝藏网站 |笔试题库|面试经验|实习招聘内推| 该文章收录专栏 ✨—【Django | 项目开发】从入门到上线 专栏—✨ 文章目录 一、设置面试官权限 1)数据权限...HR 和超级用户 一面面试官 二面面试官 2) 数据集的权限控制 通过重写 get_queryset进行条件判断,并借助Q对象对数据库SQL语句进行or and组合实现需求 from...django.db.models import Q # 列表页显示默认先运行get_queryset,没有重写则全部显示 # 此时显示的数据集是对于Candidate模型的,不影响其他模型 def...get_queryset(self, request): qs = super(CandidateAdmin, self).get_queryset(request) group_name...数据库同步则会添加在群组权限设置中, 然后对action行为添加permission权限,接着还必须要在modeladmin添加函数has_value_permission判断登录user是否has_perm(拥有权限),返回值为

    67210

    Django_rest框架电商项目实践项目(一篇文章讲清楚电商项目)项目的创建与基本的配置,所有接口的代码,项目代码已给

    view url 前段传参 商品的详情 view url 前端如何传参 查询的外键需要返回具体的name值,而不是id 第一种方法 第二种方法 实现用户的登录 用户的详情 用户详情序列器 view...url 前端如何做 用户的注册 序列化 view url 用户信息的更新 序列器 view url 收货地址的新增和列表查询 新增和list列表查询 (一个接口实现) 序列器 view url...,对于列表展示的分页功能 实现根据字段进行排序和模糊搜索 以上可以实现对列表的查询,并且实现了分页,但是现在我们想要根据某一个字段进行排序和模糊搜索,我们可以在对应的接口里面的view代码里面这样配置...name值,而不是id 第一种方法 class ProductRetrieveSerializer(serializers.ModelSerializer): # manufacturer =...P[0-9]+)/$', views.UserProfileRUView.as_view(),name='user_profile_ru'), 收货地址的新增和列表查询 新增和list列表查询

    3.2K10

    Django-DRF | GenericAPIView 视图类

    *kwargs) 数据库查询的属性与方法 指明使用的数据查询集 ① 通过属性 queryset ② 通过方法 get_queryset(self) get_object(self) class...获取所有图书信息”接口""" serializer_class = BookSerializer # 指定序列化器 queryset = Book.objects.all() # 指定查询集...搭配 GenericAPIView 使用 ListModelMixin 提供 list 方法快速实现列表视图 CreateModelMixin 提供 create 方法快速实现创建资源的视图 RetrieveModelMixin...提供 retrieve 方法,可以快速实现返回一个存在的数据对象(传入pk) UpdateModelMixin 提供 update 方法,可以快速实现更新一个存在的数据对象。...获取单一图书信息”接口""" serializer_class = BookSerializer # 指定序列化器 queryset = Book.objects.all() # 指定查询集

    1.3K10

    SQL高级查询方法

    子查询的例子可以参考笔试题中的例子,SQL笔试50题(上),SQL笔试50题(下) 4.9 联接 join 通过联接,可以从两个或多个表中根据各个表之间的逻辑关系来检索数据。...左向外部联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,来自右表的所有选择列表列均为空值。...当某一行在另一个表中没有匹配行时,另一个表的选择列表列将包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 交叉联接 交叉联接将返回左表中的所有行。左表中的每一行均与右表中的所有行组合。...当 SQL Server 处理联接时,查询引擎会从多种可行的方法中选择最有效的方法来处理联接。由于各种联接的实际执行过程会采用多种不同的优化,因此无法可靠地预测。...4.10 UNION运算符 UNION 运算符可以将两个或多个 SELECT 语句的结果组合成一个结果集。

    7.6K20

    Django 1.10中文文档-第一个应用Part5-测试

    你需要开始编写测试的另一个原因就是其他的开发者在他们认真研读你的代码前可能想要查看一下它有没有测试。 测试有助于团队合作 之前的观点是从单个开发人员来维护一个程序这个方向来阐述的。...基本的测试策略 编写测试程序有很多种方法。一些程序员遵循一种叫做“测试驱动开发”的规则,他们在编写代码前会先编好测试程序。...然后利用assertIs()方法,它发现was_published_recently()返回了True,而不是我们希望的False 这个测试通知我们哪个测试失败了,错误出现在哪一行。...timezone.now() ).order_by('-pub_date')[:5] Question.objects.filter(pub_date__lte=timezone.now())返回一个查询集...从经验上来说,好的做法是: 为每个模型或视图创建一个专属的TestClass 为你想测试的每一种情况建立一个单独的测试方法 为测试方法命名时最好从字面上能大概看出它们的功能 进一步测试

    1.3K60
    领券