首页 > 其他分享 >基于apiview接口实现 -------查、更新

基于apiview接口实现 -------查、更新

时间:2022-10-19 02:55:05浏览次数:88  
标签:request apiview 接口 ------- instance 序列化 data id serializer

https://www.bilibili.com/video/BV1z5411D7BQ?p=11&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea

views.py

class BookView(APIView):
    def get(self,request):
        # 获取所有书籍
        book_list=Book.objects.all()
        #这步其实就是把把查出来的数据赋值到序列化模型里---单条数据不需要many属性
        serializer = BookSerializers(instance=book_list, many=True)
        # # # # 调用序列化对象的data获取序列化后的数据
        data = serializer.data
        return Response(data)


    def post(self,request):
        # 获取请求的数据 #request.data可以拿到表单或json的数据
        print("data",request.data)
        # 构建序列化器
        serializer = BookSerializers(data=request.data)
        # # 校验数据--返回boolen值,成功信息放到serializer.validated_data,错误信息放到serializer.errors
        if serializer.is_valid():
            # 数据插入到数据库中
            # save()写法插入数据-----------
            serializer.save()
            #数据校验通过
            return Response(f'校验成功信息:{serializer.validated_data}') #serializer.validated_data是反序列化成数据模型了
            # return Response(f'校验成功信息:{serializer.data}') #"校验成功信息:{'title': 'j11', 'price': 1999, 'date': '2020-12-12 00:00:00'}"
        else:
            # 数据校验失败
            return Response(f'校验失败信息:{serializer.errors}')

class BooketailView(APIView):
    def get(self,request,id):
        book =Book.objects.get(pk=id)
        # 序列化传参instance,反序列化传参data
        serializer=BookSerializers(instance=book,many=False)
        return Response(serializer.data)

    def put(self,request,id):
        # 获取提交的更新数据
        print(f"提交的数据:{request.data}")
        update_book=Book.objects.get(pk=id)
        #构建序列化器对象 # instance放原来的信息,data放要修改成的信息
        # serializer.data是拿instance传的参数做序列化,
        # 所以要加下面serializer.instance=Book.objects.get(pk=id)
        # 赋值最新的数据到instance,serializer.data返回的才是更新的信息
        # 个人认为下面不加instance就可以了,一样能返回更新的数据,但是没有展示id
        serializer = BookSerializers(data=request.data, many=False)
        if serializer.is_valid():
            # 更新逻辑
            Book.objects.filter(pk=id).update(**serializer.validated_data)
            # 重新赋值instance
            serializer.instance=Book.objects.get(pk=id)
            return Response(f"更新成功{serializer.data}")
        else:
            return Response(f"更新失败: {serializer.errors}")

    def delete(self,request,id):
        pass

 

标签:request,apiview,接口,-------,instance,序列化,data,id,serializer
From: https://www.cnblogs.com/kaibindirver/p/16804820.html

相关文章

  • 接口测试之接口依赖
    接口测试经常涉及依赖,特别是token,如何解决:方案1、使用fixture,范围是session级别,将登陆步骤写入,返回token(pytset框架常用)方案2、在执行用例之前,先请求登录接口,并将......
  • 3天用flask搭建平台实战教程四:使用flask-restful-swagger-2.0自动生成swagger文档
    flask-restful-swagger-2是适用于flask-restful的包装器,根据swagger2.0规范支持swagger,flask-restful-swagger-2基于flashrestfulswagger,但flashrestfulswagger仅支持......
  • 09. Kubernetes - Pod
    PodPod是Kubernetes最基本的调度单元。在一个复杂的系统中,往往某些应用的关系是非常密切的,它们需要共享某些资源。如果都运行在同一个容器内,会面临一个问题,容器运行......
  • react-router-dom(v6)快速上手
    本篇笔记跟随官方教程而写,把其中连续的步骤碎片化,方便以后忘记的时候直接调用,其中包含了对其他小问题的拓展。创建路由(quick-start)npminstallreact-router-dom在R......
  • Selenium+Python系列 - 开发环境搭建
    一、写在前面我从未想过自己会写python系列的自动化文章,有些同学会问,那你现在为什么又开始写了?不止一个人找过我,问我可以写一些Python自动化的文章吗,答案是肯定的。笔......
  • 2022-10-19 react解析富文本
    <divdangerouslySetInnerHTML={{__html:values.content}}></div>dangerouslySetInnerHTML是react标签的一个属性,后面的__html跟返回的富文本数据。注:使用innerHTML......
  • 03-Go的执行原理及Go的常用命令
    go的源码文件分为三类:命令源码文件,库源码文件,测试源码文件命令源码文件:后缀.go的文件,一个目录下,只能有一个main的入口,否则build或install会报错。库源码文件:普通的源码......
  • 设计模式 - 动态代理
    设计模式-动态代理什么是代理代购、中介、商家举个栗子:比如有一家美国大学,面向全世界招生,而我们国内的同学,需要去到某个大学。因为我们所处国内,并不知道这个大学......
  • 【操作系统-进程】PV操作——读者写者问题
    目录读者写者问题万能模板万能模板1——读进程优先万能模板2——读写公平法万能模板3——写进程优先题目1:南北过桥问题题目2:录像厅问题题目3:更衣问题读者写者问题万......
  • 2022.10.18 - 前端Vue项目部署文件上线
    在terminal终端连接Linux服务器mac通过scp特定端口上传文件到linux服务器命令:scp-r-P10017/Users/yehudalee/Desktop/多测/portal-ui/dist/*[email protected].......