django formview_DWG TrueView

django formview_DWG TrueViewAPIView视图类在DRF中,推荐使用类视图,因为类视图可以通过继承的方式把一些重复性的工作抽取出来,而使得代码更加简洁。当然如果你不想使用类视图,那么就用@api_view装饰器包裹一下就可以。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

APIView视图类

DRF中,推荐使用类视图,因为类视图可以通过继承的方式把一些重复性的工作抽取出来,而使得代码更加简洁。当然如果你不想使用类视图,那么就用@api_view装饰器包裹一下就可以。

关于视图的逻辑,一共有10个

  • 单查、群查
  • 单增、群增
  • 单删、群删
  • 单全局改、单局部改
  • 群全局改、群局部改(这2个用的非常少)
     

单查、群查操作

注意:如果我们做的删除操作是逻辑删除,单查群查的时候,需要先过滤数据,比如过滤掉被删除的,再返回给前台

class Students(APIView):
    def get_object(self, pk):
        try:
            return Student.objects.get(pk=pk)
        except Student.DoesNotExist:
            raise Http404

    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        # 有pk代表单查
        if pk:
            student = self.get_object(pk)
            serializer = StudentModelSerializer(student)
            return Response({
                "status": 0,
                "message": "成功",
                "results": serializer.data
            })
        # 没有pk代表群查
        else:
            queryset = Student.objects.all()
            serializer = StudentModelSerializer(instance=queryset, many=True)
            return Response({
                "status": 0,
                "message": "成功",
                "results": serializer.data
            })

 

单增、群增操作

注意:单增操作的时候,看需求新增的是否是唯一的,如果是唯一,则需要判断数据已存在

def post(self, request, *args, **kwargs):
    request_data = request.data
    # 单增
    if isinstance(request_data, dict):
        many = False
    # 群增
    elif isinstance(request_data, list):
        many = True
    else:
        return Response({
            "status": 1,
            "message": "数据有误",
        })
    serializer = StudentModelSerializer(data=request_data, many=many)
    if serializer.is_valid():
        serializer.save()
        return Response({
            "status": 0,
            "message": "成功",
            "results": serializer.data
        })
    return Response(serializer.errors, status=400)

 

单删、群删操作

注意:单删的时候,需要判断数据是否已经被删除

def delete(self, request, *args, **kwargs):
    # 单删
    pk = kwargs.get("pk")
    if pk:
        pks = [pk]
    # 群删
    else:
        pks = request.data.get('pks')
    queryset = Student.objects.filter(pk__in=pks)
    if queryset:
        queryset.delete()
        return Response({
            "status": 0,
            "message": "删除成功",
        })
    else:
        return Response({
            "status": 1,
            "message": "删除失败",
        })

 

单局部改

单局部改instance=要被更新的对象,data=要更新的数据,partial=True,必填的字段都变为选填字段

def patch(self, request, *args, **kwargs):
    # 单局部改
    pk = kwargs.get('pk')
    if pk:
        instance = Student.objects.filter(pk=pk).first()
        serializer = StudentModelSerializer(instance=instance, data=request.data, partial=True)
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response({
                "status": 0,
                "message": "成功",
                "results": serializer.data
            })
    else:
        return Response({
            "status": 1,
            "message": "失败",
        })

 

单整体改

单整体改则将partial=Falsepartial默认为False

def put(self, request, *args, **kwargs):
    # 单整体改
    pk = kwargs.get('pk')
    if pk:
        instance = Student.objects.filter(pk=pk).first()
        serializer = StudentModelSerializer(instance=instance, data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response({
                "status": 0,
                "message": "成功",
                "results": serializer.data
            })
    else:
        return Response({
            "status": 1,
            "message": "失败",
        })

 

总结

APIView视图类就是做增删改查的操作,当然APIView中还继承了一些常用的属性,比如authentication_classespermission_classesthrottle_classes等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/165771.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • height:100%失败

    height:100%失败

  • 数据库-第一范式、第二范式、第三范式、BC范式、第四范式简析

    数据库-第一范式、第二范式、第三范式、BC范式、第四范式简析在设计与操作维护数据库时,最关键的问题就是要确保数据能够正确地分布到数据库的表中。使用正确的数据结构,不仅有助于对数据库进行相应的存取操作,还可以极大地简化应用程序中的其他内容(查询、窗体、报表、代码等),按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。泛化时在识别数据库中的一个数据元素、关系以及定义所需的表和各表中的项目这些初始工作之后的一个细

  • jax ws ri 生成java类_基于SOAP的webservice(1)、JAX-WS实现

    jax ws ri 生成java类_基于SOAP的webservice(1)、JAX-WS实现因为工作中使用了SOAP进行两个系统的接口调用,所以私下学习一下两种实现,粗略记录于此。本文侧重于实际实现操作,而不是理论原理。个人简单理解:SOAP(SimpleObjectAccessProtocol简单对象访问协议)是基于XML和HTTP的用于实现网络连通的程序之间远程调用的协议(但是SOAP1.2中也可以使用非HTTP协议进行传输)。两个通过网络连接的程序体,通过一定规范的XML进…

  • boot连接不上mysql数据库_关于springboot 连接mysql 数据库报错问题

    boot连接不上mysql数据库_关于springboot 连接mysql 数据库报错问题springboot连接MySQL运行报错:Theservertimezonevalue’Öйú±ê׼ʱ¼ä’isunrecognizedorrepresentsmorethanonetimezone.YoumustconfigureeithertheserverorJDBCdriver(viatheserverTimezoneconfi…

  • js中的匿名函数_js匿名函数怎么定义

    js中的匿名函数_js匿名函数怎么定义定义:匿名函数顾名思义指的是没有名字的函数,在实际开发中使用的频率非常高!也是学好JS的重点。匿名函数:没有实际名字的函数。首先我们声明一个普通函数://声明一个普通函数,函数的名字叫fnfunctionfn(){console.log(“张培跃”);}然后将函数的名字去掉即是匿名函数://匿名函数,咦,运行时,你会发现报错啦!function(){console.log(“张培跃”);}到此,你会发现单独运行一个匿名函数,由于不符合语法…

  • 虚拟机安装gcc「建议收藏」

    虚拟机安装gcc「建议收藏」(确保虚拟机网络通畅)1在虚拟机桌面上右击【打开终端】2输入sudoapt-getupdate回车输入开机密码(输入时密码并不显示,输完后回车)等待出现下一步指示3输入sudoapt-getinstallgcc回车输入密码等待(我等了约30min)出现下一步指示4输入gcc–version回车完…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号