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 方法,这样的写法更加灵活
标签:ser,get,知识,request,视图,序列化,data,serializer From: https://www.cnblogs.com/abc683871/p/17583467.html