您的位置:首页 > 编程语言 > Go语言

Django(56)Mixins工具集的使用

2021-06-10 09:13 1116 查看

前言

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: