大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
前言
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)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166128.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...