Django(56)Mixins工具集的使用
2021/6/10 10:35:54
本文主要是介绍Django(56)Mixins工具集的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
mixins
翻译成中文是混入,组件的意思。在DRF
中,针对获取列表,检索,创建等操作,都有相应的mixin
,一般我们自定义创建的类视图都会继承自GenericAPIView
和Mixins
一起使用
mixins工具集
mixins.py
文件中有5个类,分别是
CreateModelMixin
:类中有个create
方法,相当于单增ListModelMixin
:类中有个list
方法,相当于群查RetrieveModelMixin
:类中有个`retrieve方法,相当于单查UpdateModelMixin
:类中有个update
和partial_update
2个方法,相当于单整体改和单局部改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)
这篇关于Django(56)Mixins工具集的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站