标签:args Mixins self 56 request 工具集 mixins kwargs response
前言
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)
标签:args,Mixins,self,56,request,工具集,mixins,kwargs,response 来源: https://www.cnblogs.com/jiakecong/p/14868951.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。