Заставьте REST Framework требовать аутентификацию для метода GET
Я работаю над приложением Django, которое использует REST Framework вместе со Swagger. Также добавил несколько моделей, и одна из них называется Example
. Добавил несколько представлений, основанных на миксинах в views.py
для ранее упомянутой модели.
В views.py
я создал два класса: ExampleList
(который использует GET
для получения всех объектов, созданных из этой модели, и POST
для добавления новой модели) и ExampleIndividual
, который использует такие методы, как отдельные GET
, PUT
и DELETE
.
В общем, вот как выглядит мой ExampleList
класс:
class ExampleList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
permission_classes = [IsAuthenticated]
queryset = ExampleModel.objects.all()
serializer_class = ExampleSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
В файле settings.py
в конфигурации REST_FRAMEWORK
я установил:
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
На данный момент все работает нормально. Я хочу сделать следующее: всякий раз, когда я хочу получить список всех объектов из модели Example
(доступ к методу get()
из класса ExampleList()
, я хочу, чтобы это работало только если я аутентифицирован (используя опцию Authorize
из Swagger). Если нет, должен возвращаться код состояния типа "FORBIDDEN"
Я попробовал использовать permission_classes = [IsAuthenticated]
в начале метода, но это не сработало. Похоже, что я все еще могу GET
все объекты без аутентификации в Swagger.
Посоветуйте, как мне правильно это сделать? Спасибо.
Пробовали ли вы использовать аутентификацию с помощью токена? При использовании этого метода в каждом запросе к API токен должен быть включен в поле заголовка Авторизация. https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication для проверки в браузере вы можете установить расширение Mod Header https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj там вы можете включить токен в поле заголовка.