Django-rest-framework(八)使用技巧(持续补充中)

房东的猫 提交于 2020-03-24 07:19:11

3 月,跳不动了?>>>

  • 当viewset中,多个action对应了不同的serializers的时候
class UserView(viewsets.GenericViewSet):
    queryset = User.objects.all()
    serializer_class = UserSeriallers

    def get_serializer_class(self):
        if self.action in ['collection', ]:
            return Serializers1
        elif self.action in ['orderhouse', ]:
            return Seriallers2
        elif self.action in ['disperson', ]:
            return Serializers3
        return self.serializer_class
  • 当viewset中,多个action对应不同的permission
class AdviserView(viewsets.GenericViewSet):
    queryset = Adviser.objects.all().order_by("-id")
    serializer_class = AdviserSerializers
    permission_classes = (AdviserPermission, )

    def get_permissions(self):
        if self.action in ["small_app_login", "decode_data",
                           "bind_phone"]:
            self.permission_classes = ()
        return super().get_permissions()
  • 如果不习惯class view的方式可以使用@api_view装饰器,对应的权限等class可以通过对应的装饰器添加
  • serializer中,使用SerializerMethodField,如果需要使用request的数据,可以通过 self.context['request'] 取出来,同样的,如果serializer中需要将request传到context, 使用serializers的时候 需要serializer = Serializer(qs, many=True, context={ 'request': request}) 的方式传入context
  • 当列表的serializer和详情的serializer的字段不同时,可以使用继承的方式,减少代码量
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!