Я создаю сайт, в котором Django Rest Framework используется в качестве бэкэнда, а ReactJS - в качестве внешнего У меня есть несколько конечных точек API для различных данных, т.е.
/api/
/api/users/
/api/objects/
/api/other_objects/
etc
Я не хочу, чтобы обычные пользователи имели прямой доступ к интерфейсу DRF. Если кто-то решит перейти на один из этих URL-адресов, я бы предпочел перенаправить его на страницу индекса, если у него нет статуса персонала.
Я пытался перенаправить пользователей с помощью декораторов в представлениях:
from django.contrib.auth.decorators import user_passes_test
def staff_check(user):
if user.is_authenticated and user.is_staff:
return True
else:
return False
@user_passes_test(staff_check, login_url='/', redirect_field_name=None)
@api_view(['GET'])
def api_root(request, format=None):
return Response({
'users': reverse('user-list', request=request, format=format),
'objects': reverse('objects-list', request=request, format=format),
'other_objects': reverse('other-objects-list', request=request, format=format)
})
Он отлично работает в том, что касается перенаправления, но когда мое приложение React пытается получить данные с конечных точек с помощью декораторов, оно также перенаправляется.
Я знаю, что вместо этого могу установить разрешения для представлений, т.е.
class ObjectsList(generics.ListCreateAPIView):
queryset = Object.objects.all().order_by('created')
serializer_class = ObjectSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
Однако он по-прежнему позволяет пользователям просматривать интерфейс (с содержимым или без него, в зависимости от разрешений). Есть ли способ сделать конечные точки доступными для команды React fetch без перенаправления, но при этом перенаправить пользователей, когда они пытаются просмотреть интерфейс?