【问题标题】:django rest + axios put request error 403django rest + axios put请求错误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 = ()
  • 对不起。您已经在聊天中获得了权限。

标签: django rest django-rest-framework axios webpack-dev-server


【解决方案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 令牌和其他标头。
猜你喜欢
  • 2018-08-05
  • 2019-05-31
  • 1970-01-01
  • 2017-11-09
  • 2016-05-20
  • 2018-04-27
  • 2018-06-14
  • 2012-09-02
  • 2019-05-20
相关资源
最近更新 更多