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

DRF视图集-如果对象存在,则返回400,如果不存在,则返回200

DRF视图集是指Django REST framework(简称DRF)中的视图集(ViewSet)。视图集是一种用于组织和管理API视图的方式,它将相关的API视图组合在一起,提供了一组常用的操作方法,如创建、读取、更新和删除(CRUD)。

在DRF视图集中,如果对象存在,则返回400,如果不存在,则返回200,可以通过重写视图集中的retrieve方法来实现。retrieve方法用于获取单个对象的详细信息,当请求的对象存在时,返回400状态码,表示请求无效;当请求的对象不存在时,返回200状态码,表示请求成功。

以下是一个示例代码:

代码语言:txt
复制
from rest_framework import viewsets
from rest_framework.response import Response

class MyViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        if instance:
            return Response(status=400, data={'detail': 'Object already exists'})
        else:
            return Response(status=200, data={'detail': 'Object does not exist'})

在上述示例中,MyViewSet是一个自定义的视图集,继承自viewsets.ModelViewSetretrieve方法被重写,通过调用get_object方法获取对象实例,然后根据实例是否存在返回不同的响应。

DRF视图集的优势在于它提供了一种简洁而强大的方式来组织和管理API视图,减少了重复的代码编写。它还支持灵活的路由配置和权限控制,可以根据需要进行定制。

DRF视图集的应用场景包括但不限于:构建RESTful API、开发Web应用程序、构建移动应用后端等。

腾讯云提供了云计算相关的产品和服务,其中与DRF视图集相关的产品是腾讯云的Serverless云函数(SCF)。Serverless云函数是一种无服务器计算服务,可以帮助开发者在云端运行代码,无需关心服务器的管理和维护。通过使用Serverless云函数,开发者可以轻松部署和扩展DRF视图集,实现高可用和弹性的API服务。

腾讯云Serverless云函数的产品介绍和文档链接如下:

请注意,以上答案仅供参考,具体的产品选择和配置应根据实际需求和情况进行评估和决策。

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

相关·内容

  • 重点内容回顾-DRF

    &响应状态码;(200获取或修改成功/201新增成功/204删除成功/404资源不存在/400客户端请求有误/500服务器错误) e.响应数据格式JSON。...序列化对象的创建: 序列化器类(instance=, data=, **kwargs) 如果是想将对象序列化,那么将其赋值给instance; 如果是数据校验,那么将数据赋值给data...Response类的对象:传入原始的响应数据,会自动根据客户的请求头中 Accept将响应数据转换为对应的格式进行返回,默认是json,仅支持json和html 3.异常处理:如果视图中抛出了未处理异常...如果图集中一次性想要提供5个接口的时候,我们可以继承此父类。...如果图集中只想提供list和retrieve接口的时候,可以继承此父类。

    2.4K20

    第 15 篇:接口的单元测试

    PostViewSet 视图集的接口包含了文章列表、文章详情、评论列表、归档日期列表等。对于文章列表接口,还可以通过查询参数对请求的文章列表资源进行过滤,获取全部文章的一个子集。...这里由于评论数据不正确(关联的 id 为 999 的 post 不存在),因此预期返回的状态码是 400,同时数据库中不应该有创建的评论。...self.post1.pk}) def test_retrieve_nonexistent_post(self): """ 这个方法测试获取一篇不存在的文章...self.post3.pk}) def test_list_nonexistent_post_comments(self): """ 这个方法测试获取一篇不存在的文章的评论列表...# self.context["request"] 拿到请求对象 request setattr(field, "_context", {"request": drf_request

    1.2K20

    DRF框架学习(二)

    1.Restful API接口实现 1.1需求实现思路 1、获取指定的图书信息: 1)根据pk获取指定的图书对象(pk由查询字符串的形式传给后端) 2)将图书的json数据返回,状态码:200 2、修改指定的图书信息...: 1)根据pk获取指定的图书对象 2)获取参数(btitle,bpub_date)并进行校验 3)修改指定的图书的数据并更新到数据表 4)返回修改图书的json数据,状态码:200 3、删除指定的图书信息...例:将前端传递的数据保存到模型对象中的过程,叫做反序列化过程。 2.2RestAPI接口核心的工作: 把数据库数据序列化为前端所需要的格式,并返回。...serializer是独立于数据库之外的存在。...4.7模型类序列化ModelSerializer 如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer

    4.1K30

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

    其实我们可以简单地将 action 装饰的方法看作是一个视图函数的实现,因此可以看到方法传入的第一个参数为 request 请求对象,函数体就是这个视图函数需要执行的逻辑,显然,方法最终必须要返回一个...HTTP 响应对象。...通常如果要在视图集中添加额外的接口实现,可以使用如下的模板代码: @action( methods=["allowed http method name"], detail=False...接着我们在接口返回一个 Response, Response 将序列化后的结果包装返回(保存在 data 属性中),django-rest-framework 会进一步帮我们把这个 Response 中包含的数据解析为合适的格式...status=status.HTTP_200_OK 指定这个接口返回的状态码,HTTP_200_OK 是一个预定义的常数,即 200

    2.6K30

    DRF框架学习(四)

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

    2.8K40

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

    ,这样 drf-yasg 就知道忽略这个视图集对应的接口了。...原理是 drf-yasg 会尝试去解析接口对应的序列化器(Serializer),从序列化器中提取出对应的请求和响应字段(如果序列化器中找不到,它会进一步去序列化器关联的模型中找),因此我们就可以给序列化器中定义的字段添加说明信息...一是 GET /posts/{id}/comments/,最初我们发现这个接口文档的响应是一个单一的评论对象,原因我们上面也分析了,drf-yasg 根据 detail=True 误地将其作为返回单一资源的接口处理了...随着为其添加更多信息,告诉 drf-yasg 这是一个返回资源列表的接口,问题也就顺便解决了。..., viewsets.GenericViewSet ): @swagger_auto_schema(responses={200: "归档日期列表,时间倒序排列。

    1.8K20

    django和drf_类中的方法可以序列化么

    对象,用来将orm转成json # 2. data:把需要验证的数据传递给data,用来验证这些数据是不是符合要求 # 3. many:如果instance是一个queryset对象,那么就需要设置为True...*validated_data) def update(self, instance, validated_data): """ 根据提供的验证过的数据更新和返回一个已经存在的...比如我们的账号密码,只允许用户提交,后端是不返回密码给前台的 required:当为True时表示这个字段必填,不填状态码会返回400 default:默认值,没什么好说的 allow_null:当为True...StudentSerializer(data=data) # 校验字段是否符合规范 if serializer.is_valid(): # 符合保存到数据库...,如果某些字段不入库,可以将值取出校验 重写create方法,完成校验通过的数据入库工作,得到新增的对象 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164896

    1.1K30

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

    (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): """在视图集中视图对象下面会新增一个...BookInfo.objects.all() # @action(methods=["http请求方法1","http请求方法2",...], detail="是否要生成pk值",url_path="url路径,不填写默认使用方法名

    1.6K30

    DjangoRestFramework,restful规范、APIview、解析器组件、Postman等

    状态码,表示生成了新的资源;DELETE返回204状态码,表示资源已经不存在。         ...404 Not Found:所请求的资源不存在,或不可用。 405 Method Not Allowed:用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。...404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。...:返回单个资源对象, 一般是查看的单条数据 {"id":1,"name":'a'} POST /collection:返回新生成的资源对象 , 一般是返回新添加的数据信息, 格式一般是{} PUT /collection.../resource:返回完整的资源对象 一般时返回更新后的数据,{} PATCH /collection/resource:返回完整的资源对象 DELETE /collection/resource:

    2.5K20

    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的接口文档生成与管理

    post: 新建主机. """ 对于视图集ViewSet,仍在类视图的文档字符串中分开定义,但是应使用action对应的名称进行区分 class HostInfoViewSet(mixins.ListModelMixin...2.5 补充说明 1、上面访问到的接口文档,可以按照右边的指引通过安装coreapi-cli,通过命令行操作访问接口文档 2、对于视图集ViewSet中的retrieve名称,在接口文档中叫做read...json提交, 接口文档中包含json输入框 'JSON_EDITOR': True, # 方法列表字母排序 'OPERATIONS_SORTER': 'alpha',...API Info对象, 具体定义详见 Swagger/OpenAPI 规范, 如果缺省, drf-yasg默认会用 DEFAULT_INFO 进行填充 url: 项目API的基础地址, 如果缺省, 根据视图所在的位置进行推导...False, 返回当前用户具有权限的接口endpoints的API文档 validators: 用于校验自动生成的Schema的校验器, 目前仅支持 ssv 和 flex generator_class

    4.7K10

    DRF二级视图GenericAPIView

    如果未设置,默认使用lookup_field. 分页 以下属性用于在与列表视图一起使用时控制分页。 pagination_class 分页列表结果时应使用的分页类。...,被其他视图或扩展类使用,如果我们在视图中想要获取序列化器对象,可以直接调用此方法。...若详情访问的模型类对象不存在,会返回404。 经验:GenericAPIView看起来是非常美好的,可以和各个mixin结合起来使用,但是实际上用处不大。...如果不清楚DRF分页器的,可以看这里 列表和新增视图 列表视图中,每次按照分页大小返回多个数据。如下图所示,我们使用百度搜索的时候,百度会以分页的形式给我们展示数据。...,建议状态码为200如果返回数据,状态码根据情况可选择204或者205 return Response(serializers.data, status=200)

    69810

    不会DRF?源码都分析透了确定不来看?

    Django View和DRF APIView的小插曲 DRF之APIView和Request对象分析 APIView的执行流程 Request对象分析 原来的django中没有request.data...官网:https://www.django-rest-framework.org/ drf安装默认安装的最新版本,如果django版本过低会自动升级到3.x版本 版本支持对应关系 示例...(序列化) json格式字符串 -----》 python 对象 (反序列化) 如何使用DRF快速写出增删查改的接口?...view(requets),加括号调用,并且传入了当次请求的request对象 3、然后又返回了当前对象的dispatch方法,自己的名称空间内没有,那么去父类中找,然后发现父类(View)的dispatch...,那么执行下面的反射,从当前对象(视图类的对象)拿到请求方法,如果是get请求就拿到get方法,post请求就拿到post方法,然后赋给handler,handler就是相应请求对应的方法,最后返回handler

    1.3K10

    美多商城项目(五)

    数据缓存:把经常被用户访问的数据放到缓存(redis)中,当用户来访问时,直接从缓存中获取数据进行返回,只有缓存中不存在时才查询数据库。...访问流程 客户端向服务器访问数据的时候,服务器先到redis缓存中获取对应的数据,如果获取到数据,直接进行返回如果获取不到数据,再去查询数据库。...并且在查询出数据,返回结果之前,先将查询的结果存到缓存中,便于下次使用。 2.2使用缓存 在Django REST framework中使用缓存,可以通过 drf-extensions扩展来实现。...使用drf-extensions提供的扩展类 drf-extensions扩展对于缓存提供了三个扩展类: ListCacheResponseMixin 用于缓存返回列表数据的视图,与ListModelMixin...总结回顾 1.视图集对象action属性使用场景 重写getserializerclass和get_queryset,根据不同的action操作,返回不同的序列化器和不同的查询集。

    1.2K30

    Django Rest Framewor

    200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。...400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。...404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。...GET /collection:返回资源对象的列表(数组) GET /collection/resource:返回单个资源对象 POST /collection:返回新生成的资源对象 PUT /collection.../resource:返回完整的资源对象 PATCH /collection/resource:返回完整的资源对象 DELETE /collection/resource:返回一个空文档 Hypermedia

    1.3K20
    领券