Сообщение Ajax, получающее ошибку 403 с Django Rest Framework - PullRequest
0 голосов
/ 06 декабря 2018

Существует множество похожих вопросов, но каждый из них, похоже, решает проблему в разных сценариях, или предложенное решение, похоже, не решает мою проблему.В основном, Почему я получаю эту Запрещенную ошибку 403?

POST http://127.0.0.1:8000/api/hello-viewset/ 403 (Forbidden)

URL-адрес является конечной точкой Django Rest Framework (DRF), к которой я могу получить доступ из браузера.и сделать POSTs, используя графический интерфейс DRF просто отлично.Проблема в том, когда я пытаюсь POST использовать Ajax из моего файла JavaScript.Обратите внимание, что я передаю CSRFToken (как рекомендовано здесь ):

$.ajax({
    type: "POST",
    url: '/api/hello-viewset/',
    csrfmiddlewaretoken: window.CSRF_TOKEN, // yes, this variable is set successfully
    data: {first_name: username},
    success: function(data){
        console.log( 'success, server says '+data);
    }
});

/ api / hello-viewset / url - это просто упрощенное тестовое представление, которое выглядит следующим образом:

class HelloViewSet(viewsets.ViewSet):

    serializer_class = serializers.HelloSerializer

    def post(self, request):
        serializer = serializers.HelloSerializer(data=request.data)

        if serializer.is_valid():
            first_name = serializer.data.get('first_name')
            message = 'Hello {0}'.format(first_name)
            return Response({'message': message})
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Заранее спасибо за помощь?

1 Ответ

0 голосов
/ 06 декабря 2018

csrfmiddlewaretoken: window.CSRF_TOKEN установлено неправильно.Следует добавить к данным, то есть:

$.ajax({
    type: "POST",
    url: '/api/hello-viewset/',
    data: {
        first_name: username,
        csrfmiddlewaretoken: window.CSRF_TOKEN
    },
    success: function(data){
        console.log( 'success, server says '+data);
    }
});
...