solidworks第三方插件_django queryset合并

solidworks第三方插件_django queryset合并前言mixins翻译成中文是混入,组件的意思。在DRF中,针对获取列表,检索,创建等操作,都有相应的mixin,一般我们自定义创建的类视图都会继承自GenericAPIView和Mixins一起使用

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

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

前言

mixins翻译成中文是混入,组件的意思。在DRF中,针对获取列表,检索,创建等操作,都有相应的mixin,一般我们自定义创建的类视图都会继承自GenericAPIViewMixins一起使用
 

mixins工具

mixins.py文件中有5个类,分别是

  • CreateModelMixin:类中有个create方法,相当于单增
  • ListModelMixin:类中有个list方法,相当于群查
  • RetrieveModelMixin:类中有个retrieve方法,相当于单查
  • UpdateModelMixin:类中有个updatepartial_update2个方法,相当于单整体改和单局部改
  • DestroyModelMixin:类中有个destroy方法,相当于单删

接下来我们自定义视图类,继承自这5个工具类和GenericAPIView

from rest_framework import mixins
from rest_framework.generics import GenericAPIView


class StudentsGenericView(mixins.ListModelMixin, mixins.CreateModelMixin,
                          mixins.RetrieveModelMixin, mixins.UpdateModelMixin,
                          mixins.DestroyModelMixin, GenericAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentModelSerializer
    
    # 单查
    def get(self, request, *args, **kwargs):
        pk = kwargs.get("pk")
        if pk:
            response = self.retrieve(request, *args, **kwargs)
        else:
            response = self.list(request, *args, **kwargs)
        return APIResponse(results=response.data)
    
    # 单增
    def post(self, request, *args, **kwargs):
        response = self.create(request, *args, **kwargs)
        return APIResponse(results=response.data)
    
    # 单整体改
    def put(self, request, *args, **kwargs):
        response = self.update(request, *args, **kwargs)
        return APIResponse(results=response.data)

    # 单局部改 
    def patch(self, request, *args, **kwargs):
        response = self.partial_update(request, *args, **kwargs)
        return APIResponse(results=response.data)

    # 单删
    def delete(self, request, *args, **kwargs):
        response = self.destroy(request, *args, **kwargs)
        return APIResponse(results=response.data)

  以上我们通过继承GenericAPIView,可以设置queryset以及serializer_class,那么视图函数就知道你是要针对哪个模型做处理,你的序列化的类是什么了。接着我们继承mixins的5个工具类,这样StudentList就拥有了获取列表,以及创建数据的功能。

以下方法由mixin类提供,并提供对象保存或删除行为的简单重写。

  • perform_create(self, serializer) – 在保存新对象实例时由CreateModelMixin调用。
  • perform_update(self, serializer) – 在保存现有对象实例时由 UpdateModelMixin 调用。
  • perform_destroy(self, instance) – 在删除对象实例时由 DestroyModelMixin 调用。

这些钩子对于设置请求中隐含的但不是请求数据的一部分的属性特别有用。例如,你可以根据请求用户或基于URL关键字参数在对象上设置属性。

def perform_create(self, serializer):
    serializer.save(user=self.request.user)

这些可重写的关键点对于添加在保存对象之前或之后发生的行为(例如通过电子邮件发送确认或记录更新日志)也特别有用。

def perform_update(self, serializer):
    instance = serializer.save()
    send_email_confirmation(user=self.request.user, modified=instance)

你还可以使用这些钩子通过抛出 ValidationError() 来提供额外的验证。当你需要在数据库保存时应用一些验证逻辑时,这会很有用。 例如:

def perform_create(self, serializer):
    queryset = SignupRequest.objects.filter(user=self.request.user)
    if queryset.exists():
        raise ValidationError('You have already signed up')
    serializer.save(user=self.request.user)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • matlab自带的插值函数interp1的几种插值方法

    matlab自带的插值函数interp1的几种插值方法插值法    插值法又称“内插法”,是利用函数f(x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f(x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。线性插值法    线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法。    假设我们已知坐标(x0,y0)与…

    2022年6月13日
    31
  • IDEA安装插件的两种方式

    IDEA安装插件的两种方式1.IDEA中在线安装,如图所示2.有的插件下载需要VPN,导致下载很慢,我们可以通过官网下载安装包,通过本地安装包进行安装

    2022年6月1日
    80
  • adventureworksdw2008r2_world library

    adventureworksdw2008r2_world libraryAdventureWorksDatabases2008下载地址:RECOMMENDEDDOWNLOADAdventureWorks2012_Database.zipexample,37158K,uploadedAug29,2012-232028downloadsOTHERAVAILABLEDOWNLOADSAdventure…

    2022年9月11日
    0
  • java多线程面试题大全_java多线程面试题_线程并发面试题

    java多线程面试题大全_java多线程面试题_线程并发面试题1、什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。2、线程和进程有什么区别?线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一…

    2022年7月7日
    17
  • 变性跨性别_女变男的漫画

    变性跨性别_女变男的漫画這是一個未完成,也永遠不會完成的列表更新日期:2013/09/08類型:裝=異性裝/偽娘,轉=性轉換/變性,間=雌雄間性/陰陽人/無性/フタナリ,跨=跨性別(含有現實跨性別意涵者)中文題名/,原文題

    2022年8月4日
    2
  • 如何在CentOS上配置虚拟IP地址 (VIP)

    如何在CentOS上配置虚拟IP地址 (VIP)目录介绍教程第1步第2步第3步第4步第5步本教程将指导您如何在服务器上配置虚拟IP地址。介绍顾名思义,虚拟IP地址(VIP)是一个没有实际物理网络接口的IP地址。传入的数据包被发送到VIP,但所有数据包都通过真实的网络接口传输。虚拟IP地址通常用于数据库高可用性。应用程序将其用于数据库连接,而不是普通的主机IP地址。当活动数据库失败时,VIP将转移到新升…

    2022年10月20日
    0

发表回复

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

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