zoukankan      html  css  js  c++  java
  • Django-rest-framework(八)使用技巧(持续补充中)

    • 当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的字段不同时,可以使用继承的方式,减少代码量
  • 相关阅读:
    又过了一周
    本周学习情况
    5.12
    一周回顾
    npm修改全局包安装路径
    热力图之heatmap
    前端的发展历程
    idea打开maven项目没有别识别是maven项目
    nginx下部署vue项目
    WEB前端开发NodeJS
  • 原文地址:https://www.cnblogs.com/yuzhenjie/p/10374488.html
Copyright © 2011-2022 走看看