Невозможно перейти от назначения классов разрешений к использованию декоратора @permission_classes
Ниже представлен api, для которого требуется authen. Это работает
class some_random_api(generics.GenericAPIView):
permission_classes = (IsAuthenticated, )
def get(self,request):
return HttpResponse("Called successfully")
Однако мне не нравится объявлять переменные. После изучения этого документа, https://www.django-rest-framework.org/api-guide/permissions/ . Я нашел альтернативный способ, используя декоратор. Поэтому я изменил свой код на следующий.
from rest_framework.decorators import permission_classes
class some_random_api(generics.GenericAPIView):
@permission_classes(IsAuthenticated)
def get(self,request):
return HttpResponse("You call random test api")
Теперь этот API не проверяет Authen
Декоратор @permission_classes
применим только к представлениям API, основанным на функциях, как документировано .
REST framework предоставляет набор дополнительных декораторов, которые могут быть добавлены к вашим представлениям. Они должны появляться после (ниже) декоратора @api_view.
.Доступными декораторами являются:
... @permission_classes(...) ...
Также здесь:
Или, если вы используете декоратор
@api_view
с представлениями, основанными на функциях .@api_view(['GET']) @permission_classes([IsAuthenticated]) def example_view(request, format=None): ...
Альтернативой определению фиксированного списка permission_classes = (IsAuthenticated, )
является переопределение get_permissions()
и назначение различных разрешений для различных методов HTTP, как описано здесь.
class some_random_api(generics.GenericAPIView):
def get_permissions(self):
if self.request.method == "GET": # If using viewsets, the self.action can be used e.g. <if self.action == "retrieve":>
permission_classes = [permissions.IsAuthenticated]
else:
permission_classes = [permissions.IsAdminUser]
return [permission() for permission in permission_classes]
def get(self, request):
return HttpResponse("You call random test api")
Связанные вопросы: