Ajax发布Django Rest Framework导致403禁止错误

时间:2018-12-06 19:35:54

标签: javascript ajax django api django-rest-framework

有很多类似的问题,但是每个问题似乎都在不同的情况下处理,或者所指定的解决方案似乎无法解决我的问题。基本上,我为什么会收到此403禁止的错误?

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

URL是Django Rest Framework(DRF)端点,我可以从浏览器访问该端点,并使用DRF gui进行POST。问题是当我尝试通过javascript文件使用Ajax进行POST时。请注意,我正在传递CSRFToken(根据here的建议):

$.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 /网址只是一个简化的测试视图,如下所示:

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 :(得分:2)

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);
    }
});
相关问题