Django의viewsets.ModelViewSet 재작성 권한

7230 단어 django
class QuestionnaireViewSet(viewsets.ModelViewSet):
    queryset = Questionnaire.objects.filter()
    serializer_class = QuestionnaireSerializer

    filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)

    filter_fields = ("enterprise_id", "owners__id", "category_id", "owner_user_id")
    #    permission_classes_by_action  ,  get_permissions              
    permission_classes_by_action = {'default': [StarOrStaffPermission],
                                    'update': [StarOrStaffPermission],
                                    'destroy': [StarOrStaffPermission],
                                    'questionnaire_question_list': [],
                                    'list': [],
                                    'user_questionnaire_list': []
                                    }
    #   get_permissions
    def get_permissions(self):
        try:
            # return permission_classes depending on `action`
            return [permission() for permission in self.permission_classes_by_action[self.action]]
        except KeyError:
        	#               
            # action is not set return default permission_classes
            return [permission() for permission in self.permission_classes_by_action['default']]

get 보세요.permissions () 소스:
마찬가지로 반환 권한 목록
    def get_permissions(self):
        """
        Instantiates and returns the list of permissions that this view requires.
        """
        return [permission() for permission in self.permission_classes]

ModelViewSet의 모델 혼입 클래스가 공식 문서를 구성하는 것을 다시 한 번 보십시오.https://www.django-rest-framework.org/api-guide/generic-views/#mixins
class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass

좋은 웹페이지 즐겨찾기