django rest + axios put请求错误403

Posted

技术标签:

【中文标题】django rest + axios put请求错误403【英文标题】:django rest + axios put request error 403 【发布时间】:2018-08-06 15:07:14 【问题描述】:

我已经阅读了副本,但似乎没有任何效果。我可以直接从 url 中的表单执行 put 请求,但我似乎无法让 axios 请求正常工作。

我试过了:

CSRF with Django, React+Redux using Axios https://gist.github.com/paltman/490049a64fa4115a2cea

我的观点.py:

class FrequencyList(generics.ListCreateAPIView):
    queryset = Frequency.objects.all()
    serializer_class = FrequencySerializer


class FrequencyDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Frequency.objects.all()
    serializer_class = FrequencySerializer

我的 axios 请求:

axios(
        method: 'put',
        url: '/f/'+id,
        data: 
            item: item,
        ,
    ).then(function (response) 
        this.setState(needReceipt: true);
    )
    .catch(function (error) 
        console.log(error);
    );

在我的 settings.py 中:

REST_FRAMEWORK = 
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.AllowAny',
    ),

在我的 webpack.config.dev.js 中:

const axios = require('axios');

axios.defaults.xsrfHeaderName = "X-CSRFToken";
axios.defaults.xsrfCookieName = "csrftoken";

【问题讨论】:

在您的API 课堂上。您是否尝试过覆盖permission_classes = () 对不起。您已经在聊天中获得了权限。 【参考方案1】:

试试这个

axios.put('/f/'+id,  item: item )
    .then(function(response)
        this.setState(needReceipt: true);
);

Reference

【讨论】:

403(禁止) 对不起,它的 axios.put 不是 axios.post。更新了我的答案。检查 django 控制台的 url,确保它访问相同的 url,如 /f/123 并放置方法和响应。如果您仍然面临 403,则将 permission_classes = (AllowAny,) 添加到类(FrequencyDetail) 我已经尝试了上述所有建议,但仍然出现错误。错误如下: PUT localhost:8000/f/89 403 (Forbidden) 我可以物理上去 url 并手动输入 put,所以我知道 id 是正确的。 所以 put 请求工作正常而 axios.put 请求失败,这就是问题所在。你是如何成功提出请求的,是通过邮递员。如果是,请检查标头。如果不存在标头,则删除 X-CSRFToken 令牌和其他标头。 让我们continue this discussion in chat.

以上是关于django rest + axios put请求错误403的主要内容,如果未能解决你的问题,请参考以下文章

Django REST:OPTIONS 请求注册为 PUT

Axios学习

Axios学习

Axios学习

无法从 reactjs 中的 axios 向 id=1 文章的 django REST API 后端发出 GET 请求

Django REST framework框架之GET, POST, PUT, PATCH, DELETE等API请求接口设计