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

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

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

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

(0)


相关推荐

  • MySQL安装(详细,适合小白)

    MySQL安装(详细,适合小白)MySQL安装一、mysql安装包下载二、配置my.ini文件三、初始化MySQL四、可能遇到的错误操作一、mysql安装包下载官网下载地址:mysql安装包下载如图所示:二、配置my.ini文件解压后的文件尽量不要放在C盘(内存小),解压后如下图所示在上图所示梗目录下配置my.ini文件[mysqld]#设置3306端口port=3306[mysqld]#设置3306端口port=3306#设置mysql的安装目录(存放地址可以更改)basedir=E:\My

  • PyTorch安装最全流程

    PyTorch安装最全流程本文介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架。1.Anaconda安装下载链接:https://www.anaconda.com/1.1点击Next1.2点击同意1.3点击Next1.4选择目标文件夹,点击下一步1.5将Anaconda加入到系统变量安装成功后,在CMD中检查Anaconda时候加入到环境变量中。1.6单击启动AnacondaPrompt创建虚拟“房间”通过conda创建一个名为:pytorch.

  • Java指令编译java文件

    Java指令编译java文件Java指令编译java文件1.进入cmd2.编译2.1切换不同JDK编译文件3.运行1.进入cmd如何快速进入/打开cmd–快捷键在源代码目录输入cmd,然后回车2.编译如果出现错误:编码GBK的不可映射字符(0x8D)需要在javac后面加上-encodingUTF-8javac-encodingUTF-8编译的文件.java这时候就会多出.class文件,就是字节码文件了。2.1切换不同JDK编译文件一般JDK配置好了,直接用javac

  • executorservice 线程池_并发数与线程数

    executorservice 线程池_并发数与线程数keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。但…

  • pycharm2021.8激活码(注册激活)

    (pycharm2021.8激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlZ9LZO4ZKWA-eyJsa…

  • python编程是啥-Python编程「建议收藏」

    python编程是啥-Python编程「建议收藏」随着人工智能时代的来临,编程语言的热度居高不下,随着智能机器人的出现,在2020年更是迎来一波新的高峰。在这样的大环境下,关于谁是人工智能最流行编程语言的讨论也十分热烈,C、C++、Java、Python等编程语言不断被拿出来做比较。那么接下来,风变编程来解析一波当下编程语言的新趋势。Python受欢迎度有望超越Java?近日,TIOBE编程语言社区公布了2020年10月编程语言排行榜。榜单数据显…

发表回复

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

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