Различные разрешения с использованием декораторов для каждого метода внутри методов ModelViewset для «списка», «создания», «получения», «обновления» - PullRequest
0 голосов
/ 30 января 2019

Я хочу добавить разные разрешения для разных методов класса ModelViewset, используя декоратор.

Я пытался:

class abcd(viewsets.ModelViewSet):

    @permission_classes(IsAuthenticated,))
    def list(self, request, format=None):
        try:


    @permission_classes(CustomPermission,))
    def create(self, request, format=None):
        try:

Но это не работает.Я также пытался использовать @method_decorator.Это тоже не сработало.

Я знаю, что мы можем сделать следующим образом:

def get_permissions(self):
    if self.action == 'create':
        return [IsAuthenticated(), ]        
    return super(abcd, self).get_permissions()

Но мне было интересно, сможем ли мы добиться этого, используя декораторы для Django Rest Framework.

1 Ответ

0 голосов
/ 30 января 2019

ModelViewSet наследует Mixin классов и GenericAPIView.Методы list и create от Mixins, поэтому декорирование с помощью permission_classes не будет работать.Вместо этого вы можете попробовать переопределить get_permissions в APIView.

def get_permisssions(self):
    if self.request.method == "GET":
        return [IsAuthenticated()]
    elif self.request.method == "POST":
        return [CustomPermission()]
    return [permission() for permission in self.permission_classes]

Примечание: я не уверен, работает ли приведенный выше код или нет

...