Ajax 发布 Django Rest Framework 出现 403 禁止错误

Posted

技术标签:

【中文标题】Ajax 发布 Django Rest Framework 出现 403 禁止错误【英文标题】:Ajax post getting 403 forbidden error with Django Rest Framework 【发布时间】:2019-05-08 13:35:44 【问题描述】:

有很多类似的问题,但每个问题似乎都在不同的场景下处理问题,或者规定的解决方案似乎无法解决我的问题。基本上,为什么我会收到这个 403 Forbidden 错误?

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/ 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)

提前感谢您的帮助?

【问题讨论】:

你安装了 django-cors-headers 吗? 【参考方案1】:

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);
    
);

【讨论】:

你是个了不起的人! :) 这正是问题所在。它已经修复并且现在可以工作了。感谢您的帮助!

以上是关于Ajax 发布 Django Rest Framework 出现 403 禁止错误的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 发布 Django Rest Framework 出现 403 禁止错误

Django Rest Framework:通过 AJAX 上传文件

我需要显示与相同模型有多对多关系的相关字段。 Django Rest Frame工作

如何在 Django 中使用 AJAX 显示 rest api?

Django REST,ajax调用中突然出现403错误

如何使用 javascript/jquery/AJAX 调用 Django REST API?