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等。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sqlserver分页查询语句_学mysql还是sql server

    sqlserver分页查询语句_学mysql还是sql serversqlserver的四种分页方式 第一种:ROW_NUMBER()OVER()方式select*from(    select*,ROW_NUMBER()OVER(OrderbyArtistId)ASRowIdfromArtistModels  )asb   whereRowIdbetween10and20  —where…

    2022年10月21日
    2
  • Linux入门命令_零基础自学吉他的步骤

    Linux入门命令_零基础自学吉他的步骤Linux入门基础命令教程linux用户识别查看文件与目录命令三级目录linux用户识别这里我就不详细介绍什么是linux,相比你来看文章的都知道什么是linux。linux用户分为两种,分别是管理员用户和普通用户,当我们登录linux的时候会看到如下图第一部分是用户名@demon是主机名/当前所在路径root是管理员用户demon是普通用户可以看到他们的区别在于最后的字符,#是管理员用户的意思,$是普通用户的意思。查看文件与目录命令1.pwd查看当前所在的目录如图

    2022年10月10日
    3
  • mysql的服务已经停止,无法启动的解决办法

    mysql的服务已经停止,无法启动的解决办法(1)如果之前装过mysql的,把mysql的server卸载掉,连带MySQLServer5.7\data文件一起清干净(2)重新装好后,输入netstartmysql还是无法启动服务,这个时候,输入以下指令     mysqld–remove删除mysql服务     mysqld–install安装服务     mysqld

    2022年7月27日
    61
  • JetBrains又出神器啦,Fleet,体验飞一般的感觉「建议收藏」

    JetBrains又出神器啦,Fleet,体验飞一般的感觉「建议收藏」文章目录简介从eclipse到FleetFleet的特性JetBrainsSpace总结简介java开发的同学可能对于JetBrains这家公司并不陌生,因为JetBrains号称拥有世界上最好的JAVA开发工具IDEA。确实IDEA非常好用,它满足了一个java开发者所有的梦想。当然JetBrains还提供了其他语言的开发神器,PyCharm,PhpStrom,WebStorm等等。只要跟开发工作有关的,都能在JetBrains的全家桶中找到。这么好用的神器自然是价格不菲,但是JetBrains

    2022年5月1日
    390
  • html 下拉导航栏源码,html导航栏下拉菜单怎么制作?这里有详细的代码实例「建议收藏」

    html 下拉导航栏源码,html导航栏下拉菜单怎么制作?这里有详细的代码实例「建议收藏」元素来包裹这些元素,并使用CSS来设置下拉内容的样式。html导航栏菜单的CSS部分:.dropdown类使用position:relative,这将设置下拉菜单的内容放置在下拉按钮(使用position:absolute)的右下角位置。.dropdown-content类中是实际的下拉菜单。默认是隐藏的,在鼠标移动到指定元素后会显示。注意min-width的值设置为160px。你可以随意修改它…

    2022年5月24日
    92
  • java string与stringbuffer的区别_string类和stringbuilder类的区别

    java string与stringbuffer的区别_string类和stringbuilder类的区别简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuff…

    2025年12月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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