django formview_django获取post数据

django formview_django获取post数据APIView视图类在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/165426.html原文链接:https://javaforall.net

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


相关推荐

  • setbackground参数_setcookie参数

    setbackground参数_setcookie参数setrequestproperty设置http请求头HttpURLConnection.setRequestProperty(Stringkey,Stringvalue);这个我居然都忘记了,哎~真是岁数大了,心好累。。。例如:下面就是一个完整的原始网络请求方式HttpURLConnectionconn=null;try{URLmy_url=newURL(log());//得…

    2025年10月22日
    6
  • 51单片机视频教程下载

    51单片机视频教程下载链接:https://pan.baidu.com/s/1k-utjXO8L5WPxnBWS9mnxw提取码:ylaj以上是本人精心整理的【电子全能资料包】,内含单片机视频教程,整个开发工具包,以及电子书、单片机例程等等…

    2022年6月14日
    40
  • yum卸载重装[通俗易懂]

    yum卸载重装[通俗易懂]莫名原因(之前操作不小心删除了某相关文件)导致虚拟机的yum使用不了,在重新安装之前需要卸载原来的相关数据1.删除/usr/share目录下的yum-cli、yum-pluginrm-rfyum-cli/yum-plugins/2.清理与yum相关的文件rpm-qa|grepyumrpm-eyum-3.4.3-161.el7.centos.noarch…

    2022年6月10日
    72
  • 微服务架构-实现技术之三大关键要素3服务可靠性:服务访问失败的原因和应对策略+服务容错+服务隔离+服务限流+服务降级

    微服务架构-实现技术之三大关键要素3服务可靠性:服务访问失败的原因和应对策略+服务容错+服务隔离+服务限流+服务降级目录一、服务访问失败的原因和应对策略(一)服务访问失败的4大原因和分类1硬件失败2.分布式环境的固有原因3.服务自身失败4.服务依赖失败(二)服务访问的雪崩效应(三)服务访问失败的应对策略二、服务容错1.Failover2.Failback3.Failsafe4.Failfast5.Forking6.Broadcast三、服务隔离…

    2022年4月28日
    31
  • pytorch 学习 | 全局平均池化 global average pooling

    版权声明:本文为CSDN博主「qyhyzard」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/CVSvsvsvsvs/article/details/90495254利用现有的poolingAPI实现全局平均池化的效果。首先我们简单理解全局平均池化操作。如果有一批特征图,其尺寸为[B,C,H,W],我们经过全局平均池化之后,尺寸变为[B,C,1,1]。也就是说,全局平均池化…

    2022年4月11日
    655
  • 详述如何退出 Vim 编辑器

    详述如何退出 Vim 编辑器Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,其在Vi的基础上改进和增加了很多特性。怎么说呢?学习如何用Vim进行文本编辑应该算是程序员的必备技能之一啦!But,很多同学在使用Vim进行文本编辑的时候却不知道如何退出Vim编辑器,这就有些尴尬啦!因此,在本文中,详细列出如何Vim编辑器的方法,希望对大家有些帮助。首先,点击Esc键,Vim进入命令模式。然

    2022年6月7日
    39

发表回复

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

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