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

DRF视图集-如果对象已存在,则不创建但返回

DRF视图集是Django REST Framework(DRF)中的一个重要概念,它提供了一种简化和组织视图代码的方式。DRF视图集允许我们将相关的视图逻辑组织在一起,并通过不同的动作来处理不同的HTTP请求。

如果对象已存在,则不创建但返回是指在使用DRF视图集进行创建操作时,如果要创建的对象已经存在于数据库中,则不会再次创建该对象,而是直接返回已存在的对象。

这种行为可以通过在DRF视图集中使用get_or_create方法来实现。get_or_create方法会首先尝试根据指定的查询条件从数据库中获取对象,如果对象存在,则直接返回该对象;如果对象不存在,则创建一个新的对象并返回。

使用DRF视图集的优势包括:

  1. 代码组织:DRF视图集允许将相关的视图逻辑组织在一起,使代码更加清晰和易于维护。
  2. 代码复用:可以在不同的动作中共享相同的代码逻辑,减少重复代码的编写。
  3. 灵活性:DRF视图集提供了多种动作,可以根据不同的HTTP请求类型执行不同的逻辑。
  4. 可定制性:可以根据需求自定义视图集的行为,包括权限控制、序列化器选择等。

DRF视图集在许多应用场景中都非常有用,例如创建资源、更新资源、删除资源等。对于需要在创建操作中避免重复创建对象的场景,可以使用get_or_create方法来实现。

腾讯云提供了一系列与云计算相关的产品,其中与DRF视图集相关的产品包括:

  1. 云服务器(CVM):提供了可扩展的计算能力,用于部署和运行DRF应用程序。详情请参考:腾讯云云服务器
  2. 云数据库MySQL版(TencentDB for MySQL):提供了高性能、可扩展的MySQL数据库服务,用于存储DRF应用程序的数据。详情请参考:腾讯云云数据库MySQL版
  3. 云存储(COS):提供了安全可靠的对象存储服务,用于存储DRF应用程序中的静态文件和媒体资源。详情请参考:腾讯云云存储

以上是关于DRF视图集的完善且全面的答案,希望能对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第 16 篇:别再手动管理接口文档了

"pure_pagination", # 分页 "haystack", # 搜索 "drf_yasg", # 文档 ] 接着使用 drf_yasg 提供的函数来创建一个 django...GET /posts/{id}/comments/ 这个接口应该还支持分页查询的参数,生成的文档中没有列出,接口响应参数也是错误的,正确的应该是一个分页后的评论列表,文档中是单个评论对象。...当 detial=True 时,drf-yasg 会将这个 action 对应的接口看做获取单个资源的接口,因此它认为分页是不需要的。实际上我们对这个接口进行了定制,它返回的其实是评论列表。...一是 GET /posts/{id}/comments/,最初我们发现这个接口文档的响应是一个单一的评论对象,原因我们上面也分析了,drf-yasg 根据 detail=True 误地将其作为返回单一资源的接口处理了...二是 GET /posts/archive/dates/,这个接口的返回内容应该是一个日期列表,但是文档中显示的竟然是博客文章列表。drf-yasg 推断的响应类型是正确的,内容不对。

1.8K20
  • 第 9 篇:实现分类、标签、归档日期接口

    (Post)的创建日期(已去重),日期都是 Python 的 date 对象,精确到月份,降序排列。...通常如果要在视图集中添加额外的接口实现,可以使用如下的模板代码: @action( methods=["allowed http method name"], detail=False...接着我们在接口返回一个 Response, Response 将序列化后的结果包装返回(保存在 data 属性中),django-rest-framework 会进一步帮我们把这个 Response 中包含的数据解析为合适的格式...既然要使用它,当然是先安装它(安装跳过):pipenv install django-filter 接着我们来配置 PostViewSet,为其设置用于过滤返回结果集的一些属性,代码如下: from...category=1&tags=1&created_year=2020&created_month=1 这条查询返回创建于 2020 年 1 月,id 为 1 的分类下,id 为 1 的标签下的全部文章

    2.6K30

    重点内容回顾-DRF

    序列化对象创建: 序列化器类(instance=, data=, **kwargs) 如果是想将对象序列化,那么将其赋值给instance; 如果是数据校验,那么将数据赋值给data...return attrs 2.数据保存(新增&更新) 在创建序列化对象的时候如果只是传入了data参数,那么就会调用create方法进行数据保存;如果还传入了instance对象,那么就会调用update...Response类的对象:传入原始的响应数据,会自动根据客户的请求头中 Accept将响应数据转换为对应的格式进行返回,默认是json,仅支持json和html 3.异常处理:如果视图中抛出了未处理异常...如果图集中一次性想要提供5个接口的时候,我们可以继承此父类。...如果图集中只想提供list和retrieve接口的时候,可以继承此父类。

    2.4K20

    【愚公系列】2022年04月 Python教学课程 62-DRF框架介绍

    文章目录 一、DRF简介 二、DRF的特点 三、DRF增删改查 一、DRF简介 Django REST framework框架是一个用于构建WebAPl的强大而又灵活的工具。...通常简称为DRF框架或REST framework。 DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。...丰富的定制层级:函数视图、类视图、视图集合到自动生成API,满足各种需要。 多种身份认证和权限认证方式的支持。 内置了限流系统。 直观的APIweb界面。 可扩展性,插件丰富....在开发RESTAP的视图中,虽然每个视图具体操作的数据不同,增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的: 增:校验请求数据->执行反序列化过程->保存数据库->将保存的对象序列化并返回...删:判断要删除的数据是否存在->执行数据库删除 改:判断要修改的数据是否存在一>校验请求的数据->执行反序列化过程>保存数据库->将保存的对象序列化并返回 查:查询数据库->将数据序列化并返回 Django

    54820

    第 11 篇:基于 drf-haystack 的文章搜索接口

    django-haystack 默认返回的搜索结果是一个类似于 django QuerySet 的对象,需要配合模板系统使用,因为未被序列化,所以无法直接用于 django-rest-framework...先来定义序列化器,粗略过一遍 drf-haystack 官方文档[3],依葫芦画瓢创建文章(Post) 的 Serializer blog/serializers.py from drf_haystack.serializers...然后编写视图集,需继承 HaystackViewSet: blog/views.py from drf_haystack.viewsets import HaystackViewSet from .serializers...,这个对象就是视图中的 HTTP 请求对象,但是因为 django 中 request 对象无法像 flask 那样从全局获取,因此 drf 在视图中将其保存在了序列化器和序列化字段的 context...summary 是我们新增的字段,注意我们序列化的对象是文章 Post,这个对象是没有 summary 这个属性的,但是 summary 其实是对属性 body 序列化后的结果,因此我们通过指定序列化化字段的

    1.6K20

    DRF框架学习(四)

    DRF框架学习(四) 1.视图集对象的action属性 作用: 获取现在要执行的是哪一种操作。 self.action:是字符串类型,目的是获取所有执行的操作。...返回latest操作所使用的查询集 else: # 返回其他操作所使用的查询集 2.路由Router(urls文件中使用) 作用:(重点) 配合视图集进行使用,动态生成视图集中处理函数的...使用:(重点) 1.创建router类的对象 from restframe_work.routers import SimpleRouter,DefaultRouter router = SimpleRouter...DefaultRouter创建对象,在访问url地址的时候,我们都可以在后面加一个 .json,那么后台会给我们返回json格式的数据。...配合权限,如果认证失败会有两种可能的返回值: 401 Unauthorized 未认证 403 Permission Denied 权限被禁止 5.权限 权限控制可以限制用户对于视图的访问和对于具体数据对象的访问

    2.8K40

    Django REST Framework-如何使用视图集(三)

    定制视图集操作视图集提供了一些通用的操作,例如获取列表、创建对象、获取详情、更新对象、部分更新对象和删除对象等。如果需要定制这些操作的行为,可以在视图集中重写对应的方法。...另一个例子是定制 list() 方法,以便在获取书籍列表时只返回当前用户的书籍:class BookViewSet(viewsets.ModelViewSet): serializer_class...我们使用 self.request.user 获取当前请求的用户,并将其用于过滤书籍列表,只返回当前用户的书籍。视图集类型DRF 中提供了多种视图集类型,可以根据不同的需求选择合适的视图集类型。...ReadOnlyModelViewSet: 提供了默认的读取操作,但不支持创建、更新和删除操作。GenericViewSet: 提供了多种操作,例如列表、创建、获取详情、更新、部分更新和删除等。...视图集类型的选择取决于 API 的需求和开发人员的编写习惯。

    62031

    Django REST Framework-分页(一)

    在 Django REST Framework(DRF)中,分页是指将 API 查询结果划分为多个页面,每个页面包含一定数量的对象,以便在不降低性能和效率的情况下处理大量数据。...分页器DRF 提供了多种分页器,可以根据不同的需求进行选择。分页器可以在视图集合中使用,以将查询结果分成多个页面,并将每个页面的数据返回给客户端。...以下是 DRF 内置的分页器:PageNumberPagination: 基于页码的分页器,将查询结果分成多个页面,并将每个页面的数据返回给客户端。客户端可以通过 page 查询参数指定要返回的页面。...BookPagination 的分页器类,并设置了每页返回对象数量为 10。...现在,当客户端发起请求时,我们的 BookViewSet 视图集合将使用 BookPagination 分页器将查询结果划分为多个页面,并将每个页面的数据返回给客户端。

    26810

    【愚公系列】2022年04月 Python教学课程 70-DRF框架之视图集

    前言 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据...(books, many=True) # 使用序列化器对象的data方法获取序列化后的结果 data = ser.data # 3、返回所有对象字段内容...(books, many=True) # 使用序列化器对象的data方法获取序列化后的结果 data = ser.data # 3、返回所有对象字段内容..."""经过上面的处理,我们就已经把所有视图方法写在一个类中了,但是继承父类有点多 所以,drf里面提供了模型视图集[ModelViewSet],可以一次性提供5个api接口的方法 最后,def还提供了只读模型视图集...get_queryset对 同一个类中的指定视图采用不同的queryset或者不同的序列化器 """ def get_queryset(self): """在视图集中视图对象下面会新增一个

    1.6K30

    DRF的Request对象和Response对象

    DRF的Request对象和Response对象 一旦使用了DRF的视图,那么传入视图的Request对象不在是Django的Request对象,而是DRF封装过后的Request对象。...同样,DRF建议使用封装过的Response来返回HTTP响应,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。...如果需要上传文件,请阅读DRF上传文件 注意 在开发客户端应用程序时,请始终记住确保Content-Type在 HTTP 请求中发送数据时设置标头。...例如: # 视图集 from rest_framework.parsers import JSONParser from rest_framework.response import Response...不过DRF官方还是建议我们对继承自APIView类或使用@api_view进行装饰的函数,都返回Response对象。 使用了Response对象返回,默认会带有一定的样式。

    1.6K40

    drf框架中所有视图及用法

    0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views,...generics, mixins, viewsets 最基础:django自带的views类 drf框架中最基础的视图类:views.APIView drf框架中工具视图:generics GenericAPIView...上述视图都是基于django自带的views进行相关方法的分装 二.viewsets视图集 ViewSetMixin:视图集工具 - 重写as_view - 将 请求方式 映射到视图类中的 指定方法...self.get_object() :获取根据pk获取单个 self.get_serializer(*args, **kwargs):获取指定 常用的几个参数 data:用于返序列化传参 many:获取多个序列化对象...instance:如果有后面save执行更新方法,没有执行创建方法 partial:为True可以进行局部字段修改,默认为False为所有字段修改 使用这些方法的重要前提必须要 queryset serializer_class

    1.8K30

    美多商城项目(五)

    数据缓存:把经常被用户访问的数据放到缓存(redis)中,当用户来访问时,直接从缓存中获取数据进行返回,只有缓存中不存在时才查询数据库。...访问流程 客户端向服务器访问数据的时候,服务器先到redis缓存中获取对应的数据,如果获取到数据,直接进行返回如果获取不到数据,再去查询数据库。...a.创建并保存新增地址数据。 b.获取登录用户对象。...self.get_serializer(...)创建序列化器对象时,会向序列化器对象的context属性中补充request参数,可以通过 序列化器对象.context['request']来获取request...总结回顾 1.视图集对象action属性使用场景 重写getserializerclass和get_queryset,根据不同的action操作,返回不同的序列化器和不同的查询集。

    1.2K30

    drf的接口文档生成与管理

    post: 新建主机. """ 对于视图集ViewSet,仍在类视图的文档字符串中分开定义,但是应使用action对应的名称进行区分 class HostInfoViewSet(mixins.ListModelMixin...2.5 补充说明 1、上面访问到的接口文档,可以按照右边的指引通过安装coreapi-cli,通过命令行操作访问接口文档 2、对于视图集ViewSet中的retrieve名称,在接口文档中叫做read...rest_framework')), # swagger接口文档 path('docs/', schema_view, name='docs'), ... ] 3.5 访问查看 完成后重启项目,如果在此之前有进行数据库同步并创建了用户...3.6 说明 Django REST Swagger从19年开始就弃用不再维护了,作者在官方网站上说明了更推荐使用drf-yasg 可以阅读https://github.com/marcgibbons...API Info对象, 具体定义详见 Swagger/OpenAPI 规范, 如果缺省, drf-yasg默认会用 DEFAULT_INFO 进行填充 url: 项目API的基础地址, 如果缺省, 则根据视图所在的位置进行推导

    4.7K10

    DRF 视图组件

    目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的“七十二变” 第一层:基于APIview的五个接口 第一层五个接口demo...demo ReadOnlyModelViewSet视图集 两个视图集总结: 其他视图集 ViewSet GenericViewSet ViewSetMixin 总结 补充 视图集中定义附加action动作...action属性 DRF 视图组件 DRF框架提供了很多通用的视图基类与扩展类,上篇使用的APIView是比较偏Base的,视图的使用更加简化了代码,这里介绍一下其他视图的用法 Django...例如,创建绑定'GET'和'POST'方法的具体视图 到“列表”和“创建”动作… = MyViewSet视图。...,我们可以通过action对象属性来获取当前请求视图集时的action动作是哪个。

    91910

    Django DRF路由与扩展功能的实现

    图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据...serializer = StudentModelSerializer(instance=student_list, many=True) return Response(serializer.data) """如果希望在视图集中调用...列表数据list,返回2个字段, 详情数据retrieve,返回所有字段, """ def get_serializer_class(self): # 本次客户端请求的视图方法名 self.action...站点并创建一个管理员....,只需在视图内设置 pagination_class = None 到此这篇关于Django DRF路由与扩展功能的实现的文章就介绍到这了,更多相关Django DRF路由与扩展内容请搜索ZaLou.Cn

    3K30

    接口文档如何去写?

    目录 DRF 自动生成接口文档 接口文档如何去写?...一个创建用户的例子:创建用户 这样组织的原因 文档提供的形式 DRF 自动生成接口文档 我们知道前后端分离,前端一般按后端写好的接口去开发,那么就需要我们明细后端接口数据等,需要写接口文档,前端按照接口文档去开发...、一份工作所处的状态,其核心是针对被观察的对象建立起一套精简实用的数据指标。...最小数据集的产生源于信息交换的需要,就好比上下级质量技术监督部门之间、企业与质量技术监督部门之间、质量技术监督部门与社会公众之间都存在着信息交换的需求。...如果你不告诉如果解决这个问题,那么他们可能就会直接来问你。所以最好能够一步到位,直接告诉他应该如何解决,这样省时省力。 如何组织?

    1.4K10
    领券