关于视图类和序列化类的知识

发布时间 2023-07-26 20:34:24作者: ranbo145

1. 代码

class PayOrderView(GenericViewSet):
    serializer_class = PaySerializer
    def create(self,request, *args, **kwargs):
        ser = self.get_serializer(context={'request': request},data=request.data) 
        ser.is_vaild(raise_exception=True)
        ser.save()
        pay_url = ser.context.get('pay_url') 
        return APIResponse(msg='保存成功',pay_url=pay_url)

在上述代码中

ser = self.get_serializer(context={'request': request},data=request.data) # 实例化出对象 才会真正用到上面配置的序列化类
    ser.is_vaild(raise_exception=True) # 走到is_vaild开始运行序列化类

2.配置序列化类的问题

并不是说继承了GenericAPIView 就一定要配置 serializer_class 和 queryset 属性,有需要才需要配

但是如果继承了ListModelmixin,就不需要写了,因为ListModelmixin类里面带了这两步

3.get_serializer

先列举出上述视图类序列化类的属性中可以有的三种写法 

# 1 
PaySerializer(context={'request': request},data=request.data)
# 2
self.serializer_class(context={'request': request},data=request.data)
# 3 这是比较高级的写法
self.get_serializer(context={'request': request},data=request.data)

 get_serializer 是 GenericViewSet 中有的方法

当我们需要改变不同的序列化类配置,我们只需要重写get_serializer 方法,这样的写法更加灵活