Я пишу API для небольшого школьного проекта, используя Django и Django -Rest-Framework. Я пытаюсь выяснить права доступа.
Я использую APIView для своих представлений и пытаюсь установить разные разрешения для каждого метода-обработчика без написания дополнительных представлений.
Вот одно из представлений для модуля блога, который у меня есть:
(Это представление используется для /posts/
)
from .serializers import *
from django.db.models import Case, When
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.decorators import permission_classes
from rest_framework import status, permissions
# Create your views here.
class PostList(APIView):
"""
API Endpoint to List Posts
METHODS: GET, POST
"""
@permission_classes([permissions.AllowAny,])
def get(self, request, format=None):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
@permission_classes([permissions.IsAuthenticated])
def post(self, request, format=None):
serializer = PostCreationSerializer(data=request.data)
if serializer.is_valid():
obj = serializer.save()
data = serializer.data
data["id"] = obj.id
return Response(data, status=status.HTTP_201_CREATED)
return Response(status=status.HTTP_400_BAD_REQUEST)
Текущее значение по умолчанию - permissions.IsAuthenticated
, хотя изменение этого значения не обязательно поможет, поскольку я все равно придется менять некоторые разрешения индивидуально.
Так что я должен быть в состоянии сделать GET-запрос, пока он не аутентифицирован, до /posts/
и получить список всех сообщений, в то время как я должен получить 401 от запроса POST до /posts/
. Однако даже запрос GET возвращает код состояния 401.
Как правильно сделать это ... если есть хотя бы один.
Редактировать: Хотя Я дал ответ на свой вопрос, но мне все равно хотелось бы узнать, есть ли еще правильные способы решения этой проблемы.